# frozen_string_literal: true

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

module Aws::ComputeOptimizer
  module Types

    # You do not have sufficient access to perform this action.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/AccessDeniedException AWS API Documentation
    #
    class AccessDeniedException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the enrollment status of an organization's member accounts
    # in Compute Optimizer.
    #
    # @!attribute [rw] account_id
    #   The Amazon Web Services account ID.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The account enrollment status.
    #   @return [String]
    #
    # @!attribute [rw] status_reason
    #   The reason for the account enrollment status.
    #
    #   For example, an account might show a status of `Pending` because
    #   member accounts of an organization require more time to be enrolled
    #   in the service.
    #   @return [String]
    #
    # @!attribute [rw] last_updated_timestamp
    #   The Unix epoch timestamp, in seconds, of when the account enrollment
    #   status was last updated.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/AccountEnrollmentStatus AWS API Documentation
    #
    class AccountEnrollmentStatus < Struct.new(
      :account_id,
      :status,
      :status_reason,
      :last_updated_timestamp)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the configuration of an Auto Scaling group.
    #
    # @!attribute [rw] desired_capacity
    #   The desired capacity, or number of instances, for the Auto Scaling
    #   group.
    #   @return [Integer]
    #
    # @!attribute [rw] min_size
    #   The minimum size, or minimum number of instances, for the Auto
    #   Scaling group.
    #   @return [Integer]
    #
    # @!attribute [rw] max_size
    #   The maximum size, or maximum number of instances, for the Auto
    #   Scaling group.
    #   @return [Integer]
    #
    # @!attribute [rw] instance_type
    #   The instance type for the Auto Scaling group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/AutoScalingGroupConfiguration AWS API Documentation
    #
    class AutoScalingGroupConfiguration < Struct.new(
      :desired_capacity,
      :min_size,
      :max_size,
      :instance_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # An object that describes the estimated monthly savings possible by
    # adopting Compute Optimizer’s Auto Scaling group recommendations. This
    # is based on the Savings Plans and Reserved Instances discounts.
    #
    # @!attribute [rw] currency
    #   The currency of the estimated monthly savings.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the estimated monthly savings.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/AutoScalingGroupEstimatedMonthlySavings AWS API Documentation
    #
    class AutoScalingGroupEstimatedMonthlySavings < Struct.new(
      :currency,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an Auto Scaling group recommendation.
    #
    # @!attribute [rw] account_id
    #   The Amazon Web Services account ID of the Auto Scaling group.
    #   @return [String]
    #
    # @!attribute [rw] auto_scaling_group_arn
    #   The Amazon Resource Name (ARN) of the Auto Scaling group.
    #   @return [String]
    #
    # @!attribute [rw] auto_scaling_group_name
    #   The name of the Auto Scaling group.
    #   @return [String]
    #
    # @!attribute [rw] finding
    #   The finding classification of the Auto Scaling group.
    #
    #   Findings for Auto Scaling groups include:
    #
    #   * <b> <code>NotOptimized</code> </b>—An Auto Scaling group is
    #     considered not optimized when Compute Optimizer identifies a
    #     recommendation that can provide better performance for your
    #     workload.
    #
    #   * <b> <code>Optimized</code> </b>—An Auto Scaling group is
    #     considered optimized when Compute Optimizer determines that the
    #     group is correctly provisioned to run your workload based on the
    #     chosen instance type. For optimized resources, Compute Optimizer
    #     might recommend a new generation instance type.
    #   @return [String]
    #
    # @!attribute [rw] utilization_metrics
    #   An array of objects that describe the utilization metrics of the
    #   Auto Scaling group.
    #   @return [Array<Types::UtilizationMetric>]
    #
    # @!attribute [rw] look_back_period_in_days
    #   The number of days for which utilization metrics were analyzed for
    #   the Auto Scaling group.
    #   @return [Float]
    #
    # @!attribute [rw] current_configuration
    #   An array of objects that describe the current configuration of the
    #   Auto Scaling group.
    #   @return [Types::AutoScalingGroupConfiguration]
    #
    # @!attribute [rw] current_instance_gpu_info
    #   Describes the GPU accelerator settings for the current instance type
    #   of the Auto Scaling group.
    #   @return [Types::GpuInfo]
    #
    # @!attribute [rw] recommendation_options
    #   An array of objects that describe the recommendation options for the
    #   Auto Scaling group.
    #   @return [Array<Types::AutoScalingGroupRecommendationOption>]
    #
    # @!attribute [rw] last_refresh_timestamp
    #   The timestamp of when the Auto Scaling group recommendation was last
    #   generated.
    #   @return [Time]
    #
    # @!attribute [rw] current_performance_risk
    #   The risk of the current Auto Scaling group not meeting the
    #   performance needs of its workloads. The higher the risk, the more
    #   likely the current Auto Scaling group configuration has insufficient
    #   capacity and cannot meet workload requirements.
    #   @return [String]
    #
    # @!attribute [rw] effective_recommendation_preferences
    #   An object that describes the effective recommendation preferences
    #   for the Auto Scaling group.
    #   @return [Types::EffectiveRecommendationPreferences]
    #
    # @!attribute [rw] inferred_workload_types
    #   The applications that might be running on the instances in the Auto
    #   Scaling group as inferred by Compute Optimizer.
    #
    #   Compute Optimizer can infer if one of the following applications
    #   might be running on the instances:
    #
    #   * `AmazonEmr` - Infers that Amazon EMR might be running on the
    #     instances.
    #
    #   * `ApacheCassandra` - Infers that Apache Cassandra might be running
    #     on the instances.
    #
    #   * `ApacheHadoop` - Infers that Apache Hadoop might be running on the
    #     instances.
    #
    #   * `Memcached` - Infers that Memcached might be running on the
    #     instances.
    #
    #   * `NGINX` - Infers that NGINX might be running on the instances.
    #
    #   * `PostgreSql` - Infers that PostgreSQL might be running on the
    #     instances.
    #
    #   * `Redis` - Infers that Redis might be running on the instances.
    #
    #   * `Kafka` - Infers that Kafka might be running on the instance.
    #
    #   * `SQLServer` - Infers that SQLServer might be running on the
    #     instance.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/AutoScalingGroupRecommendation AWS API Documentation
    #
    class AutoScalingGroupRecommendation < Struct.new(
      :account_id,
      :auto_scaling_group_arn,
      :auto_scaling_group_name,
      :finding,
      :utilization_metrics,
      :look_back_period_in_days,
      :current_configuration,
      :current_instance_gpu_info,
      :recommendation_options,
      :last_refresh_timestamp,
      :current_performance_risk,
      :effective_recommendation_preferences,
      :inferred_workload_types)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a recommendation option for an Auto Scaling group.
    #
    # @!attribute [rw] configuration
    #   An array of objects that describe an Auto Scaling group
    #   configuration.
    #   @return [Types::AutoScalingGroupConfiguration]
    #
    # @!attribute [rw] instance_gpu_info
    #   Describes the GPU accelerator settings for the recommended instance
    #   type of the Auto Scaling group.
    #   @return [Types::GpuInfo]
    #
    # @!attribute [rw] projected_utilization_metrics
    #   An array of objects that describe the projected utilization metrics
    #   of the Auto Scaling group recommendation option.
    #
    #   <note markdown="1"> The `Cpu` and `Memory` metrics are the only projected utilization
    #   metrics returned. Additionally, the `Memory` metric is returned only
    #   for resources that have the unified CloudWatch agent installed on
    #   them. For more information, see [Enabling Memory Utilization with
    #   the CloudWatch Agent][1].
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent
    #   @return [Array<Types::UtilizationMetric>]
    #
    # @!attribute [rw] performance_risk
    #   The performance risk of the Auto Scaling group configuration
    #   recommendation.
    #
    #   Performance risk indicates the likelihood of the recommended
    #   instance type not meeting the resource needs of your workload.
    #   Compute Optimizer calculates an individual performance risk score
    #   for each specification of the recommended instance, including CPU,
    #   memory, EBS throughput, EBS IOPS, disk throughput, disk IOPS,
    #   network throughput, and network PPS. The performance risk of the
    #   recommended instance is calculated as the maximum performance risk
    #   score across the analyzed resource specifications.
    #
    #   The value ranges from `0` - `4`, with `0` meaning that the
    #   recommended resource is predicted to always provide enough hardware
    #   capability. The higher the performance risk is, the more likely you
    #   should validate whether the recommendation will meet the performance
    #   requirements of your workload before migrating your resource.
    #   @return [Float]
    #
    # @!attribute [rw] rank
    #   The rank of the Auto Scaling group recommendation option.
    #
    #   The top recommendation option is ranked as `1`.
    #   @return [Integer]
    #
    # @!attribute [rw] savings_opportunity
    #   An object that describes the savings opportunity for the Auto
    #   Scaling group recommendation option. Savings opportunity includes
    #   the estimated monthly savings amount and percentage.
    #   @return [Types::SavingsOpportunity]
    #
    # @!attribute [rw] savings_opportunity_after_discounts
    #   An object that describes the savings opportunity for the Auto
    #   Scaling group recommendation option that includes Savings Plans and
    #   Reserved Instances discounts. Savings opportunity includes the
    #   estimated monthly savings and percentage.
    #   @return [Types::AutoScalingGroupSavingsOpportunityAfterDiscounts]
    #
    # @!attribute [rw] migration_effort
    #   The level of effort required to migrate from the current instance
    #   type to the recommended instance type.
    #
    #   For example, the migration effort is `Low` if Amazon EMR is the
    #   inferred workload type and an Amazon Web Services Graviton instance
    #   type is recommended. The migration effort is `Medium` if a workload
    #   type couldn't be inferred but an Amazon Web Services Graviton
    #   instance type is recommended. The migration effort is `VeryLow` if
    #   both the current and recommended instance types are of the same CPU
    #   architecture.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/AutoScalingGroupRecommendationOption AWS API Documentation
    #
    class AutoScalingGroupRecommendationOption < Struct.new(
      :configuration,
      :instance_gpu_info,
      :projected_utilization_metrics,
      :performance_risk,
      :rank,
      :savings_opportunity,
      :savings_opportunity_after_discounts,
      :migration_effort)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the savings opportunity for Auto Scaling group
    # recommendations after applying the Savings Plans and Reserved
    # Instances discounts.
    #
    # Savings opportunity represents the estimated monthly savings you can
    # achieve by implementing Compute Optimizer recommendations.
    #
    # @!attribute [rw] savings_opportunity_percentage
    #   The estimated monthly savings possible as a percentage of monthly
    #   cost after applying the Savings Plans and Reserved Instances
    #   discounts. This saving can be achieved by adopting Compute
    #   Optimizer’s Auto Scaling group recommendations.
    #   @return [Float]
    #
    # @!attribute [rw] estimated_monthly_savings
    #   An object that describes the estimated monthly savings possible by
    #   adopting Compute Optimizer’s Auto Scaling group recommendations.
    #   This is based on the Savings Plans and Reserved Instances pricing
    #   discounts.
    #   @return [Types::AutoScalingGroupEstimatedMonthlySavings]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/AutoScalingGroupSavingsOpportunityAfterDiscounts AWS API Documentation
    #
    class AutoScalingGroupSavingsOpportunityAfterDiscounts < Struct.new(
      :savings_opportunity_percentage,
      :estimated_monthly_savings)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the container configurations within the tasks of your Amazon
    # ECS service.
    #
    # @!attribute [rw] container_name
    #   The name of the container.
    #   @return [String]
    #
    # @!attribute [rw] memory_size_configuration
    #   The memory size configurations for the container.
    #   @return [Types::MemorySizeConfiguration]
    #
    # @!attribute [rw] cpu
    #   The number of CPU units reserved for the container.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ContainerConfiguration AWS API Documentation
    #
    class ContainerConfiguration < Struct.new(
      :container_name,
      :memory_size_configuration,
      :cpu)
      SENSITIVE = []
      include Aws::Structure
    end

    # The CPU and memory recommendations for a container within the tasks of
    # your Amazon ECS service.
    #
    # @!attribute [rw] container_name
    #   The name of the container.
    #   @return [String]
    #
    # @!attribute [rw] memory_size_configuration
    #   The recommended memory size configurations for the container.
    #   @return [Types::MemorySizeConfiguration]
    #
    # @!attribute [rw] cpu
    #   The recommended number of CPU units reserved for the container.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ContainerRecommendation AWS API Documentation
    #
    class ContainerRecommendation < Struct.new(
      :container_name,
      :memory_size_configuration,
      :cpu)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the performance risk ratings for a given resource type.
    #
    # Resources with a `high` or `medium` rating are at risk of not meeting
    # the performance needs of their workloads, while resources with a `low`
    # rating are performing well in their workloads.
    #
    # @!attribute [rw] high
    #   A count of the applicable resource types with a high performance
    #   risk rating.
    #   @return [Integer]
    #
    # @!attribute [rw] medium
    #   A count of the applicable resource types with a medium performance
    #   risk rating.
    #   @return [Integer]
    #
    # @!attribute [rw] low
    #   A count of the applicable resource types with a low performance risk
    #   rating.
    #   @return [Integer]
    #
    # @!attribute [rw] very_low
    #   A count of the applicable resource types with a very low performance
    #   risk rating.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/CurrentPerformanceRiskRatings AWS API Documentation
    #
    class CurrentPerformanceRiskRatings < Struct.new(
      :high,
      :medium,
      :low,
      :very_low)
      SENSITIVE = []
      include Aws::Structure
    end

    # Defines the various metric parameters that can be customized, such as
    # threshold and headroom.
    #
    # @!attribute [rw] threshold
    #   The threshold value used for the specified metric parameter.
    #
    #   <note markdown="1"> You can only specify the threshold value for CPU utilization.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] headroom
    #   The headroom value in percentage used for the specified metric
    #   parameter.
    #
    #   The following lists the valid values for CPU and memory utilization.
    #
    #   * CPU utilization: `PERCENT_30 | PERCENT_20 | PERCENT_0`
    #
    #   * Memory utilization: `PERCENT_30 | PERCENT_20 | PERCENT_10`
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/CustomizableMetricParameters AWS API Documentation
    #
    class CustomizableMetricParameters < Struct.new(
      :threshold,
      :headroom)
      SENSITIVE = []
      include Aws::Structure
    end

    # The configuration of the recommended RDS storage.
    #
    # @!attribute [rw] storage_type
    #   The type of RDS storage.
    #   @return [String]
    #
    # @!attribute [rw] allocated_storage
    #   The size of the RDS storage in gigabytes (GB).
    #   @return [Integer]
    #
    # @!attribute [rw] iops
    #   The provisioned IOPs of the RDS storage.
    #   @return [Integer]
    #
    # @!attribute [rw] max_allocated_storage
    #   The maximum limit in gibibytes (GiB) to which Amazon RDS can
    #   automatically scale the storage of the RDS instance.
    #   @return [Integer]
    #
    # @!attribute [rw] storage_throughput
    #   The storage throughput of the RDS storage.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/DBStorageConfiguration AWS API Documentation
    #
    class DBStorageConfiguration < Struct.new(
      :storage_type,
      :allocated_storage,
      :iops,
      :max_allocated_storage,
      :storage_throughput)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] resource_type
    #   The target resource type of the recommendation preference to delete.
    #
    #   The `Ec2Instance` option encompasses standalone instances and
    #   instances that are part of Auto Scaling groups. The
    #   `AutoScalingGroup` option encompasses only instances that are part
    #   of an Auto Scaling group.
    #   @return [String]
    #
    # @!attribute [rw] scope
    #   An object that describes the scope of the recommendation preference
    #   to delete.
    #
    #   You can delete recommendation preferences that are created at the
    #   organization level (for management accounts of an organization
    #   only), account level, and resource level. For more information, see
    #   [Activating enhanced infrastructure metrics][1] in the *Compute
    #   Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html
    #   @return [Types::Scope]
    #
    # @!attribute [rw] recommendation_preference_names
    #   The name of the recommendation preference to delete.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/DeleteRecommendationPreferencesRequest AWS API Documentation
    #
    class DeleteRecommendationPreferencesRequest < Struct.new(
      :resource_type,
      :scope,
      :recommendation_preference_names)
      SENSITIVE = []
      include Aws::Structure
    end

    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/DeleteRecommendationPreferencesResponse AWS API Documentation
    #
    class DeleteRecommendationPreferencesResponse < Aws::EmptyStructure; end

    # @!attribute [rw] job_ids
    #   The identification numbers of the export jobs to return.
    #
    #   An export job ID is returned when you create an export using the
    #   ExportAutoScalingGroupRecommendations or
    #   ExportEC2InstanceRecommendations actions.
    #
    #   All export jobs created in the last seven days are returned if this
    #   parameter is omitted.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   An array of objects to specify a filter that returns a more specific
    #   list of export jobs.
    #   @return [Array<Types::JobFilter>]
    #
    # @!attribute [rw] next_token
    #   The token to advance to the next page of export jobs.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of export jobs to return with a single request.
    #
    #   To retrieve the remaining results, make another request with the
    #   returned `nextToken` value.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/DescribeRecommendationExportJobsRequest AWS API Documentation
    #
    class DescribeRecommendationExportJobsRequest < Struct.new(
      :job_ids,
      :filters,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] recommendation_export_jobs
    #   An array of objects that describe recommendation export jobs.
    #   @return [Array<Types::RecommendationExportJob>]
    #
    # @!attribute [rw] next_token
    #   The token to use to advance to the next page of export jobs.
    #
    #   This value is null when there are no more pages of export jobs to
    #   return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/DescribeRecommendationExportJobsResponse AWS API Documentation
    #
    class DescribeRecommendationExportJobsResponse < Struct.new(
      :recommendation_export_jobs,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the effective recommendation preferences for Amazon EBS
    # volumes.
    #
    # @!attribute [rw] savings_estimation_mode
    #   Describes the savings estimation mode preference applied for
    #   calculating savings opportunity for Amazon EBS volumes.
    #   @return [Types::EBSSavingsEstimationMode]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/EBSEffectiveRecommendationPreferences AWS API Documentation
    #
    class EBSEffectiveRecommendationPreferences < Struct.new(
      :savings_estimation_mode)
      SENSITIVE = []
      include Aws::Structure
    end

    # An object that describes the estimated monthly savings possible by
    # adopting Compute Optimizer’s Amazon EBS volume recommendations. This
    # includes any applicable discounts.
    #
    # @!attribute [rw] currency
    #   The currency of the estimated monthly savings.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the estimated monthly savings.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/EBSEstimatedMonthlySavings AWS API Documentation
    #
    class EBSEstimatedMonthlySavings < Struct.new(
      :currency,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a filter that returns a more specific list of Amazon Elastic
    # Block Store (Amazon EBS) volume recommendations. Use this filter with
    # the GetEBSVolumeRecommendations action.
    #
    # You can use `LambdaFunctionRecommendationFilter` with the
    # GetLambdaFunctionRecommendations action, `JobFilter` with the
    # DescribeRecommendationExportJobs action, and `Filter` with the
    # GetAutoScalingGroupRecommendations and GetEC2InstanceRecommendations
    # actions.
    #
    # @!attribute [rw] name
    #   The name of the filter.
    #
    #   Specify `Finding` to return recommendations with a specific finding
    #   classification (for example, `NotOptimized`).
    #
    #   You can filter your Amazon EBS volume recommendations by `tag:key`
    #   and `tag-key` tags.
    #
    #   A `tag:key` is a key and value combination of a tag assigned to your
    #   Amazon EBS volume recommendations. Use the tag key in the filter
    #   name and the tag value as the filter value. For example, to find all
    #   Amazon EBS volume recommendations that have a tag with the key of
    #   `Owner` and the value of `TeamA`, specify `tag:Owner` for the filter
    #   name and `TeamA` for the filter value.
    #
    #   A `tag-key` is the key of a tag assigned to your Amazon EBS volume
    #   recommendations. Use this filter to find all of your Amazon EBS
    #   volume recommendations that have a tag with a specific key. This
    #   doesn’t consider the tag value. For example, you can find your
    #   Amazon EBS volume recommendations with a tag key value of `Owner` or
    #   without any tag keys assigned.
    #   @return [String]
    #
    # @!attribute [rw] values
    #   The value of the filter.
    #
    #   The valid values are `Optimized`, or `NotOptimized`.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/EBSFilter AWS API Documentation
    #
    class EBSFilter < Struct.new(
      :name,
      :values)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the savings estimation mode used for calculating savings
    # opportunity for Amazon EBS volumes.
    #
    # @!attribute [rw] source
    #   Describes the source for calculating the savings opportunity for
    #   Amazon EBS volumes.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/EBSSavingsEstimationMode AWS API Documentation
    #
    class EBSSavingsEstimationMode < Struct.new(
      :source)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the savings opportunity for Amazon EBS volume
    # recommendations after applying specific discounts.
    #
    # @!attribute [rw] savings_opportunity_percentage
    #   The estimated monthly savings possible as a percentage of monthly
    #   cost after applying the specific discounts. This saving can be
    #   achieved by adopting Compute Optimizer’s Amazon EBS volume
    #   recommendations.
    #   @return [Float]
    #
    # @!attribute [rw] estimated_monthly_savings
    #   The estimated monthly savings possible as a percentage of monthly
    #   cost by adopting Compute Optimizer’s Amazon EBS volume
    #   recommendations. This saving includes any applicable discounts.
    #   @return [Types::EBSEstimatedMonthlySavings]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/EBSSavingsOpportunityAfterDiscounts AWS API Documentation
    #
    class EBSSavingsOpportunityAfterDiscounts < Struct.new(
      :savings_opportunity_percentage,
      :estimated_monthly_savings)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a utilization metric of an Amazon Elastic Block Store
    # (Amazon EBS) volume.
    #
    # Compare the utilization metric data of your resource against its
    # projected utilization metric data to determine the performance
    # difference between your current resource and the recommended option.
    #
    # @!attribute [rw] name
    #   The name of the utilization metric.
    #
    #   The following utilization metrics are available:
    #
    #   * `VolumeReadOpsPerSecond` - The completed read operations per
    #     second from the volume in a specified period of time.
    #
    #     Unit: Count
    #
    #   * `VolumeWriteOpsPerSecond` - The completed write operations per
    #     second to the volume in a specified period of time.
    #
    #     Unit: Count
    #
    #   * `VolumeReadBytesPerSecond` - The bytes read per second from the
    #     volume in a specified period of time.
    #
    #     Unit: Bytes
    #
    #   * `VolumeWriteBytesPerSecond` - The bytes written to the volume in a
    #     specified period of time.
    #
    #     Unit: Bytes
    #   @return [String]
    #
    # @!attribute [rw] statistic
    #   The statistic of the utilization metric.
    #
    #   The Compute Optimizer API, Command Line Interface (CLI), and SDKs
    #   return utilization metrics using only the `Maximum` statistic, which
    #   is the highest value observed during the specified period.
    #
    #   The Compute Optimizer console displays graphs for some utilization
    #   metrics using the `Average` statistic, which is the value of `Sum` /
    #   `SampleCount` during the specified period. For more information, see
    #   [Viewing resource recommendations][1] in the *Compute Optimizer User
    #   Guide*. You can also get averaged utilization metric data for your
    #   resources using Amazon CloudWatch. For more information, see the
    #   [Amazon CloudWatch User Guide][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/viewing-recommendations.html
    #   [2]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the utilization metric.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/EBSUtilizationMetric AWS API Documentation
    #
    class EBSUtilizationMetric < Struct.new(
      :name,
      :statistic,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the effective recommendation preferences for Amazon ECS
    # services.
    #
    # @!attribute [rw] savings_estimation_mode
    #   Describes the savings estimation mode preference applied for
    #   calculating savings opportunity for Amazon ECS services.
    #   @return [Types::ECSSavingsEstimationMode]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ECSEffectiveRecommendationPreferences AWS API Documentation
    #
    class ECSEffectiveRecommendationPreferences < Struct.new(
      :savings_estimation_mode)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the estimated monthly savings possible for Amazon ECS
    # services by adopting Compute Optimizer recommendations. This is based
    # on Amazon ECS service pricing after applying Savings Plans discounts.
    #
    # @!attribute [rw] currency
    #   The currency of the estimated monthly savings.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the estimated monthly savings for Amazon ECS services.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ECSEstimatedMonthlySavings AWS API Documentation
    #
    class ECSEstimatedMonthlySavings < Struct.new(
      :currency,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the savings estimation mode used for calculating savings
    # opportunity for Amazon ECS services.
    #
    # @!attribute [rw] source
    #   Describes the source for calculating the savings opportunity for
    #   Amazon ECS services.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ECSSavingsEstimationMode AWS API Documentation
    #
    class ECSSavingsEstimationMode < Struct.new(
      :source)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the savings opportunity for Amazon ECS service
    # recommendations after applying Savings Plans discounts.
    #
    # Savings opportunity represents the estimated monthly savings after
    # applying Savings Plans discounts. You can achieve this by implementing
    # a given Compute Optimizer recommendation.
    #
    # @!attribute [rw] savings_opportunity_percentage
    #   The estimated monthly savings possible as a percentage of monthly
    #   cost by adopting Compute Optimizer’s Amazon ECS service
    #   recommendations. This includes any applicable Savings Plans
    #   discounts.
    #   @return [Float]
    #
    # @!attribute [rw] estimated_monthly_savings
    #   The estimated monthly savings possible by adopting Compute
    #   Optimizer’s Amazon ECS service recommendations. This includes any
    #   applicable Savings Plans discounts.
    #   @return [Types::ECSEstimatedMonthlySavings]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ECSSavingsOpportunityAfterDiscounts AWS API Documentation
    #
    class ECSSavingsOpportunityAfterDiscounts < Struct.new(
      :savings_opportunity_percentage,
      :estimated_monthly_savings)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the projected metrics of an Amazon ECS service
    # recommendation option.
    #
    # To determine the performance difference between your current Amazon
    # ECS service and the recommended option, compare the metric data of
    # your service against its projected metric data.
    #
    # @!attribute [rw] name
    #   The name of the projected metric.
    #
    #   The following metrics are available:
    #
    #   * `Cpu` — The percentage of allocated compute units that are
    #     currently in use on the service tasks.
    #
    #   * `Memory` — The percentage of memory that's currently in use on
    #     the service tasks.
    #   @return [String]
    #
    # @!attribute [rw] timestamps
    #   The timestamps of the projected metric.
    #   @return [Array<Time>]
    #
    # @!attribute [rw] upper_bound_values
    #   The upper bound values for the projected metric.
    #   @return [Array<Float>]
    #
    # @!attribute [rw] lower_bound_values
    #   The lower bound values for the projected metric.
    #   @return [Array<Float>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ECSServiceProjectedMetric AWS API Documentation
    #
    class ECSServiceProjectedMetric < Struct.new(
      :name,
      :timestamps,
      :upper_bound_values,
      :lower_bound_values)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the projected utilization metrics of an Amazon ECS service
    # recommendation option.
    #
    # To determine the performance difference between your current Amazon
    # ECS service and the recommended option, compare the utilization metric
    # data of your service against its projected utilization metric data.
    #
    # @!attribute [rw] name
    #   The name of the projected utilization metric.
    #
    #   The following utilization metrics are available:
    #
    #   * `Cpu` — The percentage of allocated compute units that are
    #     currently in use on the service tasks.
    #
    #   * `Memory` — The percentage of memory that's currently in use on
    #     the service tasks.
    #   @return [String]
    #
    # @!attribute [rw] statistic
    #   The statistic of the projected utilization metric.
    #
    #   The Compute Optimizer API, Command Line Interface (CLI), and SDKs
    #   return utilization metrics using only the `Maximum` statistic, which
    #   is the highest value observed during the specified period.
    #
    #   The Compute Optimizer console displays graphs for some utilization
    #   metrics using the `Average` statistic, which is the value of `Sum` /
    #   `SampleCount` during the specified period. For more information, see
    #   [Viewing resource recommendations][1] in the *Compute Optimizer User
    #   Guide*. You can also get averaged utilization metric data for your
    #   resources using Amazon CloudWatch. For more information, see the
    #   [Amazon CloudWatch User Guide][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/viewing-recommendations.html
    #   [2]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html
    #   @return [String]
    #
    # @!attribute [rw] lower_bound_value
    #   The lower bound values for the projected utilization metrics.
    #   @return [Float]
    #
    # @!attribute [rw] upper_bound_value
    #   The upper bound values for the projected utilization metrics.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ECSServiceProjectedUtilizationMetric AWS API Documentation
    #
    class ECSServiceProjectedUtilizationMetric < Struct.new(
      :name,
      :statistic,
      :lower_bound_value,
      :upper_bound_value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an Amazon ECS service recommendation.
    #
    # @!attribute [rw] service_arn
    #   The Amazon Resource Name (ARN) of the current Amazon ECS service.
    #
    #   The following is the format of the ARN:
    #
    #   `arn:aws:ecs:region:aws_account_id:service/cluster-name/service-name`
    #   @return [String]
    #
    # @!attribute [rw] account_id
    #   The Amazon Web Services account ID of the Amazon ECS service.
    #   @return [String]
    #
    # @!attribute [rw] current_service_configuration
    #   The configuration of the current Amazon ECS service.
    #   @return [Types::ServiceConfiguration]
    #
    # @!attribute [rw] utilization_metrics
    #   An array of objects that describe the utilization metrics of the
    #   Amazon ECS service.
    #   @return [Array<Types::ECSServiceUtilizationMetric>]
    #
    # @!attribute [rw] lookback_period_in_days
    #   The number of days the Amazon ECS service utilization metrics were
    #   analyzed.
    #   @return [Float]
    #
    # @!attribute [rw] launch_type
    #   The launch type the Amazon ECS service is using.
    #
    #   <note markdown="1"> Compute Optimizer only supports the Fargate launch type.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] last_refresh_timestamp
    #   The timestamp of when the Amazon ECS service recommendation was last
    #   generated.
    #   @return [Time]
    #
    # @!attribute [rw] finding
    #   The finding classification of an Amazon ECS service.
    #
    #   Findings for Amazon ECS services include:
    #
    #   * <b> <code>Underprovisioned</code> </b> — When Compute Optimizer
    #     detects that there’s not enough memory or CPU, an Amazon ECS
    #     service is considered under-provisioned. An under-provisioned
    #     service might result in poor application performance.
    #
    #   * <b> <code>Overprovisioned</code> </b> — When Compute Optimizer
    #     detects that there’s excessive memory or CPU, an Amazon ECS
    #     service is considered over-provisioned. An over-provisioned
    #     service might result in additional infrastructure costs.
    #
    #   * <b> <code>Optimized</code> </b> — When both the CPU and memory of
    #     your Amazon ECS service meet the performance requirements of your
    #     workload, the service is considered optimized.
    #   @return [String]
    #
    # @!attribute [rw] finding_reason_codes
    #   The reason for the finding classification of an Amazon ECS service.
    #
    #   Finding reason codes for Amazon ECS services include:
    #
    #   * <b> <code>CPUUnderprovisioned</code> </b> — The service CPU
    #     configuration can be sized up to enhance the performance of your
    #     workload. This is identified by analyzing the `CPUUtilization`
    #     metric of the current service during the look-back period.
    #
    #   * <b> <code>CPUOverprovisioned</code> </b> — The service CPU
    #     configuration can be sized down while still meeting the
    #     performance requirements of your workload. This is identified by
    #     analyzing the `CPUUtilization` metric of the current service
    #     during the look-back period.
    #
    #   * <b> <code>MemoryUnderprovisioned</code> </b> — The service memory
    #     configuration can be sized up to enhance the performance of your
    #     workload. This is identified by analyzing the `MemoryUtilization`
    #     metric of the current service during the look-back period.
    #
    #   * <b> <code>MemoryOverprovisioned</code> </b> — The service memory
    #     configuration can be sized down while still meeting the
    #     performance requirements of your workload. This is identified by
    #     analyzing the `MemoryUtilization` metric of the current service
    #     during the look-back period.
    #   @return [Array<String>]
    #
    # @!attribute [rw] service_recommendation_options
    #   An array of objects that describe the recommendation options for the
    #   Amazon ECS service.
    #   @return [Array<Types::ECSServiceRecommendationOption>]
    #
    # @!attribute [rw] current_performance_risk
    #   The risk of the current Amazon ECS service not meeting the
    #   performance needs of its workloads. The higher the risk, the more
    #   likely the current service can't meet the performance requirements
    #   of its workload.
    #   @return [String]
    #
    # @!attribute [rw] effective_recommendation_preferences
    #   Describes the effective recommendation preferences for Amazon ECS
    #   services.
    #   @return [Types::ECSEffectiveRecommendationPreferences]
    #
    # @!attribute [rw] tags
    #   A list of tags assigned to your Amazon ECS service recommendations.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ECSServiceRecommendation AWS API Documentation
    #
    class ECSServiceRecommendation < Struct.new(
      :service_arn,
      :account_id,
      :current_service_configuration,
      :utilization_metrics,
      :lookback_period_in_days,
      :launch_type,
      :last_refresh_timestamp,
      :finding,
      :finding_reason_codes,
      :service_recommendation_options,
      :current_performance_risk,
      :effective_recommendation_preferences,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a filter that returns a more specific list of Amazon ECS
    # service recommendations. Use this filter with the
    # GetECSServiceRecommendations action.
    #
    # @!attribute [rw] name
    #   The name of the filter.
    #
    #   Specify `Finding` to return recommendations with a specific finding
    #   classification.
    #
    #   Specify `FindingReasonCode` to return recommendations with a
    #   specific finding reason code.
    #
    #   You can filter your Amazon ECS service recommendations by `tag:key`
    #   and `tag-key` tags.
    #
    #   A `tag:key` is a key and value combination of a tag assigned to your
    #   Amazon ECS service recommendations. Use the tag key in the filter
    #   name and the tag value as the filter value. For example, to find all
    #   Amazon ECS service recommendations that have a tag with the key of
    #   `Owner` and the value of `TeamA`, specify `tag:Owner` for the filter
    #   name and `TeamA` for the filter value.
    #
    #   A `tag-key` is the key of a tag assigned to your Amazon ECS service
    #   recommendations. Use this filter to find all of your Amazon ECS
    #   service recommendations that have a tag with a specific key. This
    #   doesn’t consider the tag value. For example, you can find your
    #   Amazon ECS service recommendations with a tag key value of `Owner`
    #   or without any tag keys assigned.
    #   @return [String]
    #
    # @!attribute [rw] values
    #   The value of the filter.
    #
    #   The valid values for this parameter are as follows:
    #
    #   * If you specify the `name` parameter as `Finding`, specify
    #     `Optimized`, `Underprovisioned`, or `Overprovisioned`.
    #
    #   * If you specify the `name` parameter as `FindingReasonCode`,
    #     specify `CPUUnderprovisioned`, `CPUOverprovisioned`,
    #     `MemoryUnderprovisioned`, or `MemoryOverprovisioned`.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ECSServiceRecommendationFilter AWS API Documentation
    #
    class ECSServiceRecommendationFilter < Struct.new(
      :name,
      :values)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the recommendation options for an Amazon ECS service.
    #
    # @!attribute [rw] memory
    #   The memory size of the Amazon ECS service recommendation option.
    #   @return [Integer]
    #
    # @!attribute [rw] cpu
    #   The CPU size of the Amazon ECS service recommendation option.
    #   @return [Integer]
    #
    # @!attribute [rw] savings_opportunity
    #   Describes the savings opportunity for recommendations of a given
    #   resource type or for the recommendation option of an individual
    #   resource.
    #
    #   Savings opportunity represents the estimated monthly savings you can
    #   achieve by implementing a given Compute Optimizer recommendation.
    #
    #   Savings opportunity data requires that you opt in to Cost Explorer,
    #   as well as activate **Receive Amazon EC2 resource recommendations**
    #   in the Cost Explorer preferences page. That creates a connection
    #   between Cost Explorer and Compute Optimizer. With this connection,
    #   Cost Explorer generates savings estimates considering the price of
    #   existing resources, the price of recommended resources, and
    #   historical usage data. Estimated monthly savings reflects the
    #   projected dollar savings associated with each of the recommendations
    #   generated. For more information, see [Enabling Cost Explorer][1] and
    #   [Optimizing your cost with Rightsizing Recommendations][2] in the
    #   *Cost Management User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/cost-management/latest/userguide/ce-enable.html
    #   [2]: https://docs.aws.amazon.com/cost-management/latest/userguide/ce-rightsizing.html
    #   @return [Types::SavingsOpportunity]
    #
    # @!attribute [rw] savings_opportunity_after_discounts
    #   Describes the savings opportunity for Amazon ECS service
    #   recommendations or for the recommendation option.
    #
    #   Savings opportunity represents the estimated monthly savings after
    #   applying Savings Plans discounts. You can achieve this by
    #   implementing a given Compute Optimizer recommendation.
    #   @return [Types::ECSSavingsOpportunityAfterDiscounts]
    #
    # @!attribute [rw] projected_utilization_metrics
    #   An array of objects that describe the projected utilization metrics
    #   of the Amazon ECS service recommendation option.
    #   @return [Array<Types::ECSServiceProjectedUtilizationMetric>]
    #
    # @!attribute [rw] container_recommendations
    #   The CPU and memory size recommendations for the containers within
    #   the task of your Amazon ECS service.
    #   @return [Array<Types::ContainerRecommendation>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ECSServiceRecommendationOption AWS API Documentation
    #
    class ECSServiceRecommendationOption < Struct.new(
      :memory,
      :cpu,
      :savings_opportunity,
      :savings_opportunity_after_discounts,
      :projected_utilization_metrics,
      :container_recommendations)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the projected metrics of an Amazon ECS service
    # recommendation option.
    #
    # To determine the performance difference between your current Amazon
    # ECS service and the recommended option, compare the metric data of
    # your service against its projected metric data.
    #
    # @!attribute [rw] recommended_cpu_units
    #   The recommended CPU size for the Amazon ECS service.
    #   @return [Integer]
    #
    # @!attribute [rw] recommended_memory_size
    #   The recommended memory size for the Amazon ECS service.
    #   @return [Integer]
    #
    # @!attribute [rw] projected_metrics
    #   An array of objects that describe the projected metric.
    #   @return [Array<Types::ECSServiceProjectedMetric>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ECSServiceRecommendedOptionProjectedMetric AWS API Documentation
    #
    class ECSServiceRecommendedOptionProjectedMetric < Struct.new(
      :recommended_cpu_units,
      :recommended_memory_size,
      :projected_metrics)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the utilization metric of an Amazon ECS service.
    #
    # To determine the performance difference between your current Amazon
    # ECS service and the recommended option, compare the utilization metric
    # data of your service against its projected utilization metric data.
    #
    # @!attribute [rw] name
    #   The name of the utilization metric.
    #
    #   The following utilization metrics are available:
    #
    #   * `Cpu` — The amount of CPU capacity that's used in the service.
    #
    #   * `Memory` — The amount of memory that's used in the service.
    #   @return [String]
    #
    # @!attribute [rw] statistic
    #   The statistic of the utilization metric.
    #
    #   The Compute Optimizer API, Command Line Interface (CLI), and SDKs
    #   return utilization metrics using only the `Maximum` statistic, which
    #   is the highest value observed during the specified period.
    #
    #   The Compute Optimizer console displays graphs for some utilization
    #   metrics using the `Average` statistic, which is the value of `Sum` /
    #   `SampleCount` during the specified period. For more information, see
    #   [Viewing resource recommendations][1] in the *Compute Optimizer User
    #   Guide*. You can also get averaged utilization metric data for your
    #   resources using Amazon CloudWatch. For more information, see the
    #   [Amazon CloudWatch User Guide][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/viewing-recommendations.html
    #   [2]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the utilization metric.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ECSServiceUtilizationMetric AWS API Documentation
    #
    class ECSServiceUtilizationMetric < Struct.new(
      :name,
      :statistic,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the effective preferred resources that Compute Optimizer
    # considers as rightsizing recommendation candidates.
    #
    # <note markdown="1"> Compute Optimizer only supports Amazon EC2 instance types.
    #
    #  </note>
    #
    # @!attribute [rw] name
    #   The name of the preferred resource list.
    #   @return [String]
    #
    # @!attribute [rw] include_list
    #   The list of preferred resource values that you want considered as
    #   rightsizing recommendation candidates.
    #   @return [Array<String>]
    #
    # @!attribute [rw] effective_include_list
    #   The expanded version of your preferred resource's include list.
    #   @return [Array<String>]
    #
    # @!attribute [rw] exclude_list
    #   The list of preferred resources values that you want excluded from
    #   rightsizing recommendation candidates.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/EffectivePreferredResource AWS API Documentation
    #
    class EffectivePreferredResource < Struct.new(
      :name,
      :include_list,
      :effective_include_list,
      :exclude_list)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the effective recommendation preferences for a resource.
    #
    # @!attribute [rw] cpu_vendor_architectures
    #   Describes the CPU vendor and architecture for an instance or Auto
    #   Scaling group recommendations.
    #
    #   For example, when you specify `AWS_ARM64` with:
    #
    #   * A GetEC2InstanceRecommendations or
    #     GetAutoScalingGroupRecommendations request, Compute Optimizer
    #     returns recommendations that consist of Graviton instance types
    #     only.
    #
    #   * A GetEC2RecommendationProjectedMetrics request, Compute Optimizer
    #     returns projected utilization metrics for Graviton instance type
    #     recommendations only.
    #
    #   * A ExportEC2InstanceRecommendations or
    #     ExportAutoScalingGroupRecommendations request, Compute Optimizer
    #     exports recommendations that consist of Graviton instance types
    #     only.
    #   @return [Array<String>]
    #
    # @!attribute [rw] enhanced_infrastructure_metrics
    #   Describes the activation status of the enhanced infrastructure
    #   metrics preference.
    #
    #   A status of `Active` confirms that the preference is applied in the
    #   latest recommendation refresh, and a status of `Inactive` confirms
    #   that it's not yet applied to recommendations.
    #
    #   For more information, see [Enhanced infrastructure metrics][1] in
    #   the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html
    #   @return [String]
    #
    # @!attribute [rw] inferred_workload_types
    #   Describes the activation status of the inferred workload types
    #   preference.
    #
    #   A status of `Active` confirms that the preference is applied in the
    #   latest recommendation refresh. A status of `Inactive` confirms that
    #   it's not yet applied to recommendations.
    #   @return [String]
    #
    # @!attribute [rw] external_metrics_preference
    #   An object that describes the external metrics recommendation
    #   preference.
    #
    #   If the preference is applied in the latest recommendation refresh,
    #   an object with a valid `source` value appears in the response. If
    #   the preference isn't applied to the recommendations already, then
    #   this object doesn't appear in the response.
    #   @return [Types::ExternalMetricsPreference]
    #
    # @!attribute [rw] look_back_period
    #   The number of days the utilization metrics of the Amazon Web
    #   Services resource are analyzed.
    #   @return [String]
    #
    # @!attribute [rw] utilization_preferences
    #   The resource’s CPU and memory utilization preferences, such as
    #   threshold and headroom, that are used to generate rightsizing
    #   recommendations.
    #
    #   <note markdown="1"> This preference is only available for the Amazon EC2 instance
    #   resource type.
    #
    #    </note>
    #   @return [Array<Types::UtilizationPreference>]
    #
    # @!attribute [rw] preferred_resources
    #   The resource type values that are considered as candidates when
    #   generating rightsizing recommendations.
    #   @return [Array<Types::EffectivePreferredResource>]
    #
    # @!attribute [rw] savings_estimation_mode
    #   Describes the savings estimation mode applied for calculating
    #   savings opportunity for a resource.
    #   @return [Types::InstanceSavingsEstimationMode]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/EffectiveRecommendationPreferences AWS API Documentation
    #
    class EffectiveRecommendationPreferences < Struct.new(
      :cpu_vendor_architectures,
      :enhanced_infrastructure_metrics,
      :inferred_workload_types,
      :external_metrics_preference,
      :look_back_period,
      :utilization_preferences,
      :preferred_resources,
      :savings_estimation_mode)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a filter that returns a more specific list of account
    # enrollment statuses. Use this filter with the
    # GetEnrollmentStatusesForOrganization action.
    #
    # @!attribute [rw] name
    #   The name of the filter.
    #
    #   Specify `Status` to return accounts with a specific enrollment
    #   status (for example, `Active`).
    #   @return [String]
    #
    # @!attribute [rw] values
    #   The value of the filter.
    #
    #   The valid values are `Active`, `Inactive`, `Pending`, and `Failed`.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/EnrollmentFilter AWS API Documentation
    #
    class EnrollmentFilter < Struct.new(
      :name,
      :values)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the estimated monthly savings amount possible, based on
    # On-Demand instance pricing, by adopting Compute Optimizer
    # recommendations for a given resource.
    #
    # For more information, see [Estimated monthly savings and savings
    # opportunities][1] in the *Compute Optimizer User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/view-ec2-recommendations.html#ec2-savings-calculation
    #
    # @!attribute [rw] currency
    #   The currency of the estimated monthly savings.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the estimated monthly savings.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/EstimatedMonthlySavings AWS API Documentation
    #
    class EstimatedMonthlySavings < Struct.new(
      :currency,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] account_ids
    #   The IDs of the Amazon Web Services accounts for which to export Auto
    #   Scaling group recommendations.
    #
    #   If your account is the management account of an organization, use
    #   this parameter to specify the member account for which you want to
    #   export recommendations.
    #
    #   This parameter cannot be specified together with the include member
    #   accounts parameter. The parameters are mutually exclusive.
    #
    #   Recommendations for member accounts are not included in the export
    #   if this parameter, or the include member accounts parameter, is
    #   omitted.
    #
    #   You can specify multiple account IDs per request.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   An array of objects to specify a filter that exports a more specific
    #   set of Auto Scaling group recommendations.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] fields_to_export
    #   The recommendations data to include in the export file. For more
    #   information about the fields that can be exported, see [Exported
    #   files][1] in the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html#exported-files
    #   @return [Array<String>]
    #
    # @!attribute [rw] s3_destination_config
    #   An object to specify the destination Amazon Simple Storage Service
    #   (Amazon S3) bucket name and key prefix for the export job.
    #
    #   You must create the destination Amazon S3 bucket for your
    #   recommendations export before you create the export job. Compute
    #   Optimizer does not create the S3 bucket for you. After you create
    #   the S3 bucket, ensure that it has the required permissions policy to
    #   allow Compute Optimizer to write the export file to it. If you plan
    #   to specify an object prefix when you create the export job, you must
    #   include the object prefix in the policy that you add to the S3
    #   bucket. For more information, see [Amazon S3 Bucket Policy for
    #   Compute Optimizer][1] in the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/create-s3-bucket-policy-for-compute-optimizer.html
    #   @return [Types::S3DestinationConfig]
    #
    # @!attribute [rw] file_format
    #   The format of the export file.
    #
    #   The only export file format currently supported is `Csv`.
    #   @return [String]
    #
    # @!attribute [rw] include_member_accounts
    #   Indicates whether to include recommendations for resources in all
    #   member accounts of the organization if your account is the
    #   management account of an organization.
    #
    #   The member accounts must also be opted in to Compute Optimizer, and
    #   trusted access for Compute Optimizer must be enabled in the
    #   organization account. For more information, see [Compute Optimizer
    #   and Amazon Web Services Organizations trusted access][1] in the
    #   *Compute Optimizer User Guide*.
    #
    #   Recommendations for member accounts of the organization are not
    #   included in the export file if this parameter is omitted.
    #
    #   This parameter cannot be specified together with the account IDs
    #   parameter. The parameters are mutually exclusive.
    #
    #   Recommendations for member accounts are not included in the export
    #   if this parameter, or the account IDs parameter, is omitted.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html#trusted-service-access
    #   @return [Boolean]
    #
    # @!attribute [rw] recommendation_preferences
    #   An object to specify the preferences for the Auto Scaling group
    #   recommendations to export.
    #   @return [Types::RecommendationPreferences]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportAutoScalingGroupRecommendationsRequest AWS API Documentation
    #
    class ExportAutoScalingGroupRecommendationsRequest < Struct.new(
      :account_ids,
      :filters,
      :fields_to_export,
      :s3_destination_config,
      :file_format,
      :include_member_accounts,
      :recommendation_preferences)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] job_id
    #   The identification number of the export job.
    #
    #   Use the DescribeRecommendationExportJobs action, and specify the job
    #   ID to view the status of an export job.
    #   @return [String]
    #
    # @!attribute [rw] s3_destination
    #   An object that describes the destination Amazon S3 bucket of a
    #   recommendations export file.
    #   @return [Types::S3Destination]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportAutoScalingGroupRecommendationsResponse AWS API Documentation
    #
    class ExportAutoScalingGroupRecommendationsResponse < Struct.new(
      :job_id,
      :s3_destination)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the destination of the recommendations export and metadata
    # files.
    #
    # @!attribute [rw] s3
    #   An object that describes the destination Amazon Simple Storage
    #   Service (Amazon S3) bucket name and object keys of a recommendations
    #   export file, and its associated metadata file.
    #   @return [Types::S3Destination]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportDestination AWS API Documentation
    #
    class ExportDestination < Struct.new(
      :s3)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] account_ids
    #   The IDs of the Amazon Web Services accounts for which to export
    #   Amazon EBS volume recommendations.
    #
    #   If your account is the management account of an organization, use
    #   this parameter to specify the member account for which you want to
    #   export recommendations.
    #
    #   This parameter cannot be specified together with the include member
    #   accounts parameter. The parameters are mutually exclusive.
    #
    #   Recommendations for member accounts are not included in the export
    #   if this parameter, or the include member accounts parameter, is
    #   omitted.
    #
    #   You can specify multiple account IDs per request.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   An array of objects to specify a filter that exports a more specific
    #   set of Amazon EBS volume recommendations.
    #   @return [Array<Types::EBSFilter>]
    #
    # @!attribute [rw] fields_to_export
    #   The recommendations data to include in the export file. For more
    #   information about the fields that can be exported, see [Exported
    #   files][1] in the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html#exported-files
    #   @return [Array<String>]
    #
    # @!attribute [rw] s3_destination_config
    #   Describes the destination Amazon Simple Storage Service (Amazon S3)
    #   bucket name and key prefix for a recommendations export job.
    #
    #   You must create the destination Amazon S3 bucket for your
    #   recommendations export before you create the export job. Compute
    #   Optimizer does not create the S3 bucket for you. After you create
    #   the S3 bucket, ensure that it has the required permission policy to
    #   allow Compute Optimizer to write the export file to it. If you plan
    #   to specify an object prefix when you create the export job, you must
    #   include the object prefix in the policy that you add to the S3
    #   bucket. For more information, see [Amazon S3 Bucket Policy for
    #   Compute Optimizer][1] in the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/create-s3-bucket-policy-for-compute-optimizer.html
    #   @return [Types::S3DestinationConfig]
    #
    # @!attribute [rw] file_format
    #   The format of the export file.
    #
    #   The only export file format currently supported is `Csv`.
    #   @return [String]
    #
    # @!attribute [rw] include_member_accounts
    #   Indicates whether to include recommendations for resources in all
    #   member accounts of the organization if your account is the
    #   management account of an organization.
    #
    #   The member accounts must also be opted in to Compute Optimizer, and
    #   trusted access for Compute Optimizer must be enabled in the
    #   organization account. For more information, see [Compute Optimizer
    #   and Amazon Web Services Organizations trusted access][1] in the
    #   *Compute Optimizer User Guide*.
    #
    #   Recommendations for member accounts of the organization are not
    #   included in the export file if this parameter is omitted.
    #
    #   This parameter cannot be specified together with the account IDs
    #   parameter. The parameters are mutually exclusive.
    #
    #   Recommendations for member accounts are not included in the export
    #   if this parameter, or the account IDs parameter, is omitted.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html#trusted-service-access
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportEBSVolumeRecommendationsRequest AWS API Documentation
    #
    class ExportEBSVolumeRecommendationsRequest < Struct.new(
      :account_ids,
      :filters,
      :fields_to_export,
      :s3_destination_config,
      :file_format,
      :include_member_accounts)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] job_id
    #   The identification number of the export job.
    #
    #   Use the DescribeRecommendationExportJobs action, and specify the job
    #   ID to view the status of an export job.
    #   @return [String]
    #
    # @!attribute [rw] s3_destination
    #   Describes the destination Amazon Simple Storage Service (Amazon S3)
    #   bucket name and object keys of a recommendations export file, and
    #   its associated metadata file.
    #   @return [Types::S3Destination]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportEBSVolumeRecommendationsResponse AWS API Documentation
    #
    class ExportEBSVolumeRecommendationsResponse < Struct.new(
      :job_id,
      :s3_destination)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] account_ids
    #   The IDs of the Amazon Web Services accounts for which to export
    #   instance recommendations.
    #
    #   If your account is the management account of an organization, use
    #   this parameter to specify the member account for which you want to
    #   export recommendations.
    #
    #   This parameter cannot be specified together with the include member
    #   accounts parameter. The parameters are mutually exclusive.
    #
    #   Recommendations for member accounts are not included in the export
    #   if this parameter, or the include member accounts parameter, is
    #   omitted.
    #
    #   You can specify multiple account IDs per request.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   An array of objects to specify a filter that exports a more specific
    #   set of instance recommendations.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] fields_to_export
    #   The recommendations data to include in the export file. For more
    #   information about the fields that can be exported, see [Exported
    #   files][1] in the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html#exported-files
    #   @return [Array<String>]
    #
    # @!attribute [rw] s3_destination_config
    #   An object to specify the destination Amazon Simple Storage Service
    #   (Amazon S3) bucket name and key prefix for the export job.
    #
    #   You must create the destination Amazon S3 bucket for your
    #   recommendations export before you create the export job. Compute
    #   Optimizer does not create the S3 bucket for you. After you create
    #   the S3 bucket, ensure that it has the required permissions policy to
    #   allow Compute Optimizer to write the export file to it. If you plan
    #   to specify an object prefix when you create the export job, you must
    #   include the object prefix in the policy that you add to the S3
    #   bucket. For more information, see [Amazon S3 Bucket Policy for
    #   Compute Optimizer][1] in the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/create-s3-bucket-policy-for-compute-optimizer.html
    #   @return [Types::S3DestinationConfig]
    #
    # @!attribute [rw] file_format
    #   The format of the export file.
    #
    #   The only export file format currently supported is `Csv`.
    #   @return [String]
    #
    # @!attribute [rw] include_member_accounts
    #   Indicates whether to include recommendations for resources in all
    #   member accounts of the organization if your account is the
    #   management account of an organization.
    #
    #   The member accounts must also be opted in to Compute Optimizer, and
    #   trusted access for Compute Optimizer must be enabled in the
    #   organization account. For more information, see [Compute Optimizer
    #   and Amazon Web Services Organizations trusted access][1] in the
    #   *Compute Optimizer User Guide*.
    #
    #   Recommendations for member accounts of the organization are not
    #   included in the export file if this parameter is omitted.
    #
    #   Recommendations for member accounts are not included in the export
    #   if this parameter, or the account IDs parameter, is omitted.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html#trusted-service-access
    #   @return [Boolean]
    #
    # @!attribute [rw] recommendation_preferences
    #   An object to specify the preferences for the Amazon EC2 instance
    #   recommendations to export.
    #   @return [Types::RecommendationPreferences]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportEC2InstanceRecommendationsRequest AWS API Documentation
    #
    class ExportEC2InstanceRecommendationsRequest < Struct.new(
      :account_ids,
      :filters,
      :fields_to_export,
      :s3_destination_config,
      :file_format,
      :include_member_accounts,
      :recommendation_preferences)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] job_id
    #   The identification number of the export job.
    #
    #   Use the DescribeRecommendationExportJobs action, and specify the job
    #   ID to view the status of an export job.
    #   @return [String]
    #
    # @!attribute [rw] s3_destination
    #   An object that describes the destination Amazon S3 bucket of a
    #   recommendations export file.
    #   @return [Types::S3Destination]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportEC2InstanceRecommendationsResponse AWS API Documentation
    #
    class ExportEC2InstanceRecommendationsResponse < Struct.new(
      :job_id,
      :s3_destination)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] account_ids
    #   The Amazon Web Services account IDs for the export Amazon ECS
    #   service recommendations.
    #
    #   If your account is the management account or the delegated
    #   administrator of an organization, use this parameter to specify the
    #   member account you want to export recommendations to.
    #
    #   This parameter can't be specified together with the include member
    #   accounts parameter. The parameters are mutually exclusive.
    #
    #   If this parameter or the include member accounts parameter is
    #   omitted, the recommendations for member accounts aren't included in
    #   the export.
    #
    #   You can specify multiple account IDs per request.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   An array of objects to specify a filter that exports a more specific
    #   set of Amazon ECS service recommendations.
    #   @return [Array<Types::ECSServiceRecommendationFilter>]
    #
    # @!attribute [rw] fields_to_export
    #   The recommendations data to include in the export file. For more
    #   information about the fields that can be exported, see [Exported
    #   files][1] in the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html#exported-files
    #   @return [Array<String>]
    #
    # @!attribute [rw] s3_destination_config
    #   Describes the destination Amazon Simple Storage Service (Amazon S3)
    #   bucket name and key prefix for a recommendations export job.
    #
    #   You must create the destination Amazon S3 bucket for your
    #   recommendations export before you create the export job. Compute
    #   Optimizer does not create the S3 bucket for you. After you create
    #   the S3 bucket, ensure that it has the required permission policy to
    #   allow Compute Optimizer to write the export file to it. If you plan
    #   to specify an object prefix when you create the export job, you must
    #   include the object prefix in the policy that you add to the S3
    #   bucket. For more information, see [Amazon S3 Bucket Policy for
    #   Compute Optimizer][1] in the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/create-s3-bucket-policy-for-compute-optimizer.html
    #   @return [Types::S3DestinationConfig]
    #
    # @!attribute [rw] file_format
    #   The format of the export file.
    #
    #   The CSV file is the only export file format currently supported.
    #   @return [String]
    #
    # @!attribute [rw] include_member_accounts
    #   If your account is the management account or the delegated
    #   administrator of an organization, this parameter indicates whether
    #   to include recommendations for resources in all member accounts of
    #   the organization.
    #
    #   The member accounts must also be opted in to Compute Optimizer, and
    #   trusted access for Compute Optimizer must be enabled in the
    #   organization account. For more information, see [Compute Optimizer
    #   and Amazon Web Services Organizations trusted access][1] in the
    #   *Compute Optimizer User Guide*.
    #
    #   If this parameter is omitted, recommendations for member accounts of
    #   the organization aren't included in the export file.
    #
    #   If this parameter or the account ID parameter is omitted,
    #   recommendations for member accounts aren't included in the export.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html#trusted-service-access
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportECSServiceRecommendationsRequest AWS API Documentation
    #
    class ExportECSServiceRecommendationsRequest < Struct.new(
      :account_ids,
      :filters,
      :fields_to_export,
      :s3_destination_config,
      :file_format,
      :include_member_accounts)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] job_id
    #   The identification number of the export job.
    #
    #   To view the status of an export job, use the
    #   DescribeRecommendationExportJobs action and specify the job ID.
    #   @return [String]
    #
    # @!attribute [rw] s3_destination
    #   Describes the destination Amazon Simple Storage Service (Amazon S3)
    #   bucket name and object keys of a recommendations export file, and
    #   its associated metadata file.
    #   @return [Types::S3Destination]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportECSServiceRecommendationsResponse AWS API Documentation
    #
    class ExportECSServiceRecommendationsResponse < Struct.new(
      :job_id,
      :s3_destination)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] account_ids
    #   The IDs of the Amazon Web Services accounts for which to export
    #   Lambda function recommendations.
    #
    #   If your account is the management account of an organization, use
    #   this parameter to specify the member account for which you want to
    #   export recommendations.
    #
    #   This parameter cannot be specified together with the include member
    #   accounts parameter. The parameters are mutually exclusive.
    #
    #   Recommendations for member accounts are not included in the export
    #   if this parameter, or the include member accounts parameter, is
    #   omitted.
    #
    #   You can specify multiple account IDs per request.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   An array of objects to specify a filter that exports a more specific
    #   set of Lambda function recommendations.
    #   @return [Array<Types::LambdaFunctionRecommendationFilter>]
    #
    # @!attribute [rw] fields_to_export
    #   The recommendations data to include in the export file. For more
    #   information about the fields that can be exported, see [Exported
    #   files][1] in the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html#exported-files
    #   @return [Array<String>]
    #
    # @!attribute [rw] s3_destination_config
    #   Describes the destination Amazon Simple Storage Service (Amazon S3)
    #   bucket name and key prefix for a recommendations export job.
    #
    #   You must create the destination Amazon S3 bucket for your
    #   recommendations export before you create the export job. Compute
    #   Optimizer does not create the S3 bucket for you. After you create
    #   the S3 bucket, ensure that it has the required permission policy to
    #   allow Compute Optimizer to write the export file to it. If you plan
    #   to specify an object prefix when you create the export job, you must
    #   include the object prefix in the policy that you add to the S3
    #   bucket. For more information, see [Amazon S3 Bucket Policy for
    #   Compute Optimizer][1] in the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/create-s3-bucket-policy-for-compute-optimizer.html
    #   @return [Types::S3DestinationConfig]
    #
    # @!attribute [rw] file_format
    #   The format of the export file.
    #
    #   The only export file format currently supported is `Csv`.
    #   @return [String]
    #
    # @!attribute [rw] include_member_accounts
    #   Indicates whether to include recommendations for resources in all
    #   member accounts of the organization if your account is the
    #   management account of an organization.
    #
    #   The member accounts must also be opted in to Compute Optimizer, and
    #   trusted access for Compute Optimizer must be enabled in the
    #   organization account. For more information, see [Compute Optimizer
    #   and Amazon Web Services Organizations trusted access][1] in the
    #   *Compute Optimizer User Guide*.
    #
    #   Recommendations for member accounts of the organization are not
    #   included in the export file if this parameter is omitted.
    #
    #   This parameter cannot be specified together with the account IDs
    #   parameter. The parameters are mutually exclusive.
    #
    #   Recommendations for member accounts are not included in the export
    #   if this parameter, or the account IDs parameter, is omitted.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html#trusted-service-access
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportLambdaFunctionRecommendationsRequest AWS API Documentation
    #
    class ExportLambdaFunctionRecommendationsRequest < Struct.new(
      :account_ids,
      :filters,
      :fields_to_export,
      :s3_destination_config,
      :file_format,
      :include_member_accounts)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] job_id
    #   The identification number of the export job.
    #
    #   Use the DescribeRecommendationExportJobs action, and specify the job
    #   ID to view the status of an export job.
    #   @return [String]
    #
    # @!attribute [rw] s3_destination
    #   Describes the destination Amazon Simple Storage Service (Amazon S3)
    #   bucket name and object keys of a recommendations export file, and
    #   its associated metadata file.
    #   @return [Types::S3Destination]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportLambdaFunctionRecommendationsResponse AWS API Documentation
    #
    class ExportLambdaFunctionRecommendationsResponse < Struct.new(
      :job_id,
      :s3_destination)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] account_ids
    #   The IDs of the Amazon Web Services accounts for which to export
    #   license recommendations.
    #
    #   If your account is the management account of an organization, use
    #   this parameter to specify the member account for which you want to
    #   export recommendations.
    #
    #   This parameter can't be specified together with the include member
    #   accounts parameter. The parameters are mutually exclusive.
    #
    #   If this parameter is omitted, recommendations for member accounts
    #   aren't included in the export.
    #
    #   You can specify multiple account IDs per request.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   An array of objects to specify a filter that exports a more specific
    #   set of license recommendations.
    #   @return [Array<Types::LicenseRecommendationFilter>]
    #
    # @!attribute [rw] fields_to_export
    #   The recommendations data to include in the export file. For more
    #   information about the fields that can be exported, see [Exported
    #   files][1] in the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html#exported-files
    #   @return [Array<String>]
    #
    # @!attribute [rw] s3_destination_config
    #   Describes the destination Amazon Simple Storage Service (Amazon S3)
    #   bucket name and key prefix for a recommendations export job.
    #
    #   You must create the destination Amazon S3 bucket for your
    #   recommendations export before you create the export job. Compute
    #   Optimizer does not create the S3 bucket for you. After you create
    #   the S3 bucket, ensure that it has the required permission policy to
    #   allow Compute Optimizer to write the export file to it. If you plan
    #   to specify an object prefix when you create the export job, you must
    #   include the object prefix in the policy that you add to the S3
    #   bucket. For more information, see [Amazon S3 Bucket Policy for
    #   Compute Optimizer][1] in the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/create-s3-bucket-policy-for-compute-optimizer.html
    #   @return [Types::S3DestinationConfig]
    #
    # @!attribute [rw] file_format
    #   The format of the export file.
    #
    #   A CSV file is the only export format currently supported.
    #   @return [String]
    #
    # @!attribute [rw] include_member_accounts
    #   Indicates whether to include recommendations for resources in all
    #   member accounts of the organization if your account is the
    #   management account of an organization.
    #
    #   The member accounts must also be opted in to Compute Optimizer, and
    #   trusted access for Compute Optimizer must be enabled in the
    #   organization account. For more information, see [Compute Optimizer
    #   and Amazon Web Services Organizations trusted access][1] in the
    #   *Compute Optimizer User Guide*.
    #
    #   If this parameter is omitted, recommendations for member accounts of
    #   the organization aren't included in the export file .
    #
    #   This parameter cannot be specified together with the account IDs
    #   parameter. The parameters are mutually exclusive.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html#trusted-service-access
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportLicenseRecommendationsRequest AWS API Documentation
    #
    class ExportLicenseRecommendationsRequest < Struct.new(
      :account_ids,
      :filters,
      :fields_to_export,
      :s3_destination_config,
      :file_format,
      :include_member_accounts)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] job_id
    #   The identification number of the export job.
    #
    #   To view the status of an export job, use the
    #   DescribeRecommendationExportJobs action and specify the job ID.
    #   @return [String]
    #
    # @!attribute [rw] s3_destination
    #   Describes the destination Amazon Simple Storage Service (Amazon S3)
    #   bucket name and object keys of a recommendations export file, and
    #   its associated metadata file.
    #   @return [Types::S3Destination]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportLicenseRecommendationsResponse AWS API Documentation
    #
    class ExportLicenseRecommendationsResponse < Struct.new(
      :job_id,
      :s3_destination)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] account_ids
    #   The Amazon Web Services account IDs for the export Amazon RDS
    #   recommendations.
    #
    #   If your account is the management account or the delegated
    #   administrator of an organization, use this parameter to specify the
    #   member account you want to export recommendations to.
    #
    #   This parameter can't be specified together with the include member
    #   accounts parameter. The parameters are mutually exclusive.
    #
    #   If this parameter or the include member accounts parameter is
    #   omitted, the recommendations for member accounts aren't included in
    #   the export.
    #
    #   You can specify multiple account IDs per request.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   An array of objects to specify a filter that exports a more specific
    #   set of Amazon RDS recommendations.
    #   @return [Array<Types::RDSDBRecommendationFilter>]
    #
    # @!attribute [rw] fields_to_export
    #   The recommendations data to include in the export file. For more
    #   information about the fields that can be exported, see [Exported
    #   files][1] in the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html#exported-files
    #   @return [Array<String>]
    #
    # @!attribute [rw] s3_destination_config
    #   Describes the destination Amazon Simple Storage Service (Amazon S3)
    #   bucket name and key prefix for a recommendations export job.
    #
    #   You must create the destination Amazon S3 bucket for your
    #   recommendations export before you create the export job. Compute
    #   Optimizer does not create the S3 bucket for you. After you create
    #   the S3 bucket, ensure that it has the required permission policy to
    #   allow Compute Optimizer to write the export file to it. If you plan
    #   to specify an object prefix when you create the export job, you must
    #   include the object prefix in the policy that you add to the S3
    #   bucket. For more information, see [Amazon S3 Bucket Policy for
    #   Compute Optimizer][1] in the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/create-s3-bucket-policy-for-compute-optimizer.html
    #   @return [Types::S3DestinationConfig]
    #
    # @!attribute [rw] file_format
    #   The format of the export file.
    #
    #   The CSV file is the only export file format currently supported.
    #   @return [String]
    #
    # @!attribute [rw] include_member_accounts
    #   If your account is the management account or the delegated
    #   administrator of an organization, this parameter indicates whether
    #   to include recommendations for resources in all member accounts of
    #   the organization.
    #
    #   The member accounts must also be opted in to Compute Optimizer, and
    #   trusted access for Compute Optimizer must be enabled in the
    #   organization account. For more information, see [Compute Optimizer
    #   and Amazon Web Services Organizations trusted access][1] in the
    #   *Compute Optimizer User Guide*.
    #
    #   If this parameter is omitted, recommendations for member accounts of
    #   the organization aren't included in the export file.
    #
    #   If this parameter or the account ID parameter is omitted,
    #   recommendations for member accounts aren't included in the export.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html#trusted-service-access
    #   @return [Boolean]
    #
    # @!attribute [rw] recommendation_preferences
    #   Describes the recommendation preferences to return in the response
    #   of a GetAutoScalingGroupRecommendations,
    #   GetEC2InstanceRecommendations, GetEC2RecommendationProjectedMetrics,
    #   GetRDSDatabaseRecommendations, and
    #   GetRDSDatabaseRecommendationProjectedMetrics request.
    #   @return [Types::RecommendationPreferences]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportRDSDatabaseRecommendationsRequest AWS API Documentation
    #
    class ExportRDSDatabaseRecommendationsRequest < Struct.new(
      :account_ids,
      :filters,
      :fields_to_export,
      :s3_destination_config,
      :file_format,
      :include_member_accounts,
      :recommendation_preferences)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] job_id
    #   The identification number of the export job.
    #
    #   To view the status of an export job, use the
    #   DescribeRecommendationExportJobs action and specify the job ID.
    #   @return [String]
    #
    # @!attribute [rw] s3_destination
    #   Describes the destination Amazon Simple Storage Service (Amazon S3)
    #   bucket name and object keys of a recommendations export file, and
    #   its associated metadata file.
    #   @return [Types::S3Destination]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportRDSDatabaseRecommendationsResponse AWS API Documentation
    #
    class ExportRDSDatabaseRecommendationsResponse < Struct.new(
      :job_id,
      :s3_destination)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes Compute Optimizer's integration status with your chosen
    # external metric provider. For example, Datadog.
    #
    # @!attribute [rw] status_code
    #   The status code for Compute Optimizer's integration with an
    #   external metrics provider.
    #   @return [String]
    #
    # @!attribute [rw] status_reason
    #   The reason for Compute Optimizer's integration status with your
    #   external metric provider.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExternalMetricStatus AWS API Documentation
    #
    class ExternalMetricStatus < Struct.new(
      :status_code,
      :status_reason)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the external metrics preferences for EC2 rightsizing
    # recommendations.
    #
    # @!attribute [rw] source
    #   Contains the source options for external metrics preferences.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExternalMetricsPreference AWS API Documentation
    #
    class ExternalMetricsPreference < Struct.new(
      :source)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a filter that returns a more specific list of
    # recommendations. Use this filter with the
    # GetAutoScalingGroupRecommendations and GetEC2InstanceRecommendations
    # actions.
    #
    # You can use `EBSFilter` with the GetEBSVolumeRecommendations action,
    # `LambdaFunctionRecommendationFilter` with the
    # GetLambdaFunctionRecommendations action, and `JobFilter` with the
    # DescribeRecommendationExportJobs action.
    #
    # @!attribute [rw] name
    #   The name of the filter.
    #
    #   Specify `Finding` to return recommendations with a specific finding
    #   classification. For example, `Underprovisioned`.
    #
    #   Specify `RecommendationSourceType` to return recommendations of a
    #   specific resource type. For example, `Ec2Instance`.
    #
    #   Specify `FindingReasonCodes` to return recommendations with a
    #   specific finding reason code. For example, `CPUUnderprovisioned`.
    #
    #   Specify `InferredWorkloadTypes` to return recommendations of a
    #   specific inferred workload. For example, `Redis`.
    #
    #   You can filter your EC2 instance recommendations by `tag:key` and
    #   `tag-key` tags.
    #
    #   A `tag:key` is a key and value combination of a tag assigned to your
    #   recommendations. Use the tag key in the filter name and the tag
    #   value as the filter value. For example, to find all recommendations
    #   that have a tag with the key of `Owner` and the value of `TeamA`,
    #   specify `tag:Owner` for the filter name and `TeamA` for the filter
    #   value.
    #
    #   A `tag-key` is the key of a tag assigned to your recommendations.
    #   Use this filter to find all of your recommendations that have a tag
    #   with a specific key. This doesn’t consider the tag value. For
    #   example, you can find your recommendations with a tag key value of
    #   `Owner` or without any tag keys assigned.
    #   @return [String]
    #
    # @!attribute [rw] values
    #   The value of the filter.
    #
    #   The valid values for this parameter are as follows, depending on
    #   what you specify for the `name` parameter and the resource type that
    #   you wish to filter results for:
    #
    #   * Specify `Optimized` or `NotOptimized` if you specify the `name`
    #     parameter as `Finding` and you want to filter results for Auto
    #     Scaling groups.
    #
    #   * Specify `Underprovisioned`, `Overprovisioned`, or `Optimized` if
    #     you specify the `name` parameter as `Finding` and you want to
    #     filter results for EC2 instances.
    #
    #   * Specify `Ec2Instance` or `AutoScalingGroup` if you specify the
    #     `name` parameter as `RecommendationSourceType`.
    #
    #   * Specify one of the following options if you specify the `name`
    #     parameter as `FindingReasonCodes`:
    #
    #     * <b> <code>CPUOverprovisioned</code> </b> — The instance’s CPU
    #       configuration can be sized down while still meeting the
    #       performance requirements of your workload.
    #
    #     * <b> <code>CPUUnderprovisioned</code> </b> — The instance’s CPU
    #       configuration doesn't meet the performance requirements of your
    #       workload and there is an alternative instance type that provides
    #       better CPU performance.
    #
    #     * <b> <code>MemoryOverprovisioned</code> </b> — The instance’s
    #       memory configuration can be sized down while still meeting the
    #       performance requirements of your workload.
    #
    #     * <b> <code>MemoryUnderprovisioned</code> </b> — The instance’s
    #       memory configuration doesn't meet the performance requirements
    #       of your workload and there is an alternative instance type that
    #       provides better memory performance.
    #
    #     * <b> <code>EBSThroughputOverprovisioned</code> </b> — The
    #       instance’s EBS throughput configuration can be sized down while
    #       still meeting the performance requirements of your workload.
    #
    #     * <b> <code>EBSThroughputUnderprovisioned</code> </b> — The
    #       instance’s EBS throughput configuration doesn't meet the
    #       performance requirements of your workload and there is an
    #       alternative instance type that provides better EBS throughput
    #       performance.
    #
    #     * <b> <code>EBSIOPSOverprovisioned</code> </b> — The instance’s
    #       EBS IOPS configuration can be sized down while still meeting the
    #       performance requirements of your workload.
    #
    #     * <b> <code>EBSIOPSUnderprovisioned</code> </b> — The instance’s
    #       EBS IOPS configuration doesn't meet the performance
    #       requirements of your workload and there is an alternative
    #       instance type that provides better EBS IOPS performance.
    #
    #     * <b> <code>NetworkBandwidthOverprovisioned</code> </b> — The
    #       instance’s network bandwidth configuration can be sized down
    #       while still meeting the performance requirements of your
    #       workload.
    #
    #     * <b> <code>NetworkBandwidthUnderprovisioned</code> </b> — The
    #       instance’s network bandwidth configuration doesn't meet the
    #       performance requirements of your workload and there is an
    #       alternative instance type that provides better network bandwidth
    #       performance. This finding reason happens when the `NetworkIn` or
    #       `NetworkOut` performance of an instance is impacted.
    #
    #     * <b> <code>NetworkPPSOverprovisioned</code> </b> — The instance’s
    #       network PPS (packets per second) configuration can be sized down
    #       while still meeting the performance requirements of your
    #       workload.
    #
    #     * <b> <code>NetworkPPSUnderprovisioned</code> </b> — The
    #       instance’s network PPS (packets per second) configuration
    #       doesn't meet the performance requirements of your workload and
    #       there is an alternative instance type that provides better
    #       network PPS performance.
    #
    #     * <b> <code>DiskIOPSOverprovisioned</code> </b> — The instance’s
    #       disk IOPS configuration can be sized down while still meeting
    #       the performance requirements of your workload.
    #
    #     * <b> <code>DiskIOPSUnderprovisioned</code> </b> — The instance’s
    #       disk IOPS configuration doesn't meet the performance
    #       requirements of your workload and there is an alternative
    #       instance type that provides better disk IOPS performance.
    #
    #     * <b> <code>DiskThroughputOverprovisioned</code> </b> — The
    #       instance’s disk throughput configuration can be sized down while
    #       still meeting the performance requirements of your workload.
    #
    #     * <b> <code>DiskThroughputUnderprovisioned</code> </b> — The
    #       instance’s disk throughput configuration doesn't meet the
    #       performance requirements of your workload and there is an
    #       alternative instance type that provides better disk throughput
    #       performance.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/Filter AWS API Documentation
    #
    class Filter < Struct.new(
      :name,
      :values)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] account_ids
    #   The ID of the Amazon Web Services account for which to return Auto
    #   Scaling group recommendations.
    #
    #   If your account is the management account of an organization, use
    #   this parameter to specify the member account for which you want to
    #   return Auto Scaling group recommendations.
    #
    #   Only one account ID can be specified per request.
    #   @return [Array<String>]
    #
    # @!attribute [rw] auto_scaling_group_arns
    #   The Amazon Resource Name (ARN) of the Auto Scaling groups for which
    #   to return recommendations.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token to advance to the next page of Auto Scaling group
    #   recommendations.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of Auto Scaling group recommendations to return
    #   with a single request.
    #
    #   To retrieve the remaining results, make another request with the
    #   returned `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   An array of objects to specify a filter that returns a more specific
    #   list of Auto Scaling group recommendations.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] recommendation_preferences
    #   An object to specify the preferences for the Auto Scaling group
    #   recommendations to return in the response.
    #   @return [Types::RecommendationPreferences]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetAutoScalingGroupRecommendationsRequest AWS API Documentation
    #
    class GetAutoScalingGroupRecommendationsRequest < Struct.new(
      :account_ids,
      :auto_scaling_group_arns,
      :next_token,
      :max_results,
      :filters,
      :recommendation_preferences)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to advance to the next page of Auto Scaling group
    #   recommendations.
    #
    #   This value is null when there are no more pages of Auto Scaling
    #   group recommendations to return.
    #   @return [String]
    #
    # @!attribute [rw] auto_scaling_group_recommendations
    #   An array of objects that describe Auto Scaling group
    #   recommendations.
    #   @return [Array<Types::AutoScalingGroupRecommendation>]
    #
    # @!attribute [rw] errors
    #   An array of objects that describe errors of the request.
    #
    #   For example, an error is returned if you request recommendations for
    #   an unsupported Auto Scaling group.
    #   @return [Array<Types::GetRecommendationError>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetAutoScalingGroupRecommendationsResponse AWS API Documentation
    #
    class GetAutoScalingGroupRecommendationsResponse < Struct.new(
      :next_token,
      :auto_scaling_group_recommendations,
      :errors)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] volume_arns
    #   The Amazon Resource Name (ARN) of the volumes for which to return
    #   recommendations.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token to advance to the next page of volume recommendations.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of volume recommendations to return with a single
    #   request.
    #
    #   To retrieve the remaining results, make another request with the
    #   returned `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   An array of objects to specify a filter that returns a more specific
    #   list of volume recommendations.
    #   @return [Array<Types::EBSFilter>]
    #
    # @!attribute [rw] account_ids
    #   The ID of the Amazon Web Services account for which to return volume
    #   recommendations.
    #
    #   If your account is the management account of an organization, use
    #   this parameter to specify the member account for which you want to
    #   return volume recommendations.
    #
    #   Only one account ID can be specified per request.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetEBSVolumeRecommendationsRequest AWS API Documentation
    #
    class GetEBSVolumeRecommendationsRequest < Struct.new(
      :volume_arns,
      :next_token,
      :max_results,
      :filters,
      :account_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to advance to the next page of volume
    #   recommendations.
    #
    #   This value is null when there are no more pages of volume
    #   recommendations to return.
    #   @return [String]
    #
    # @!attribute [rw] volume_recommendations
    #   An array of objects that describe volume recommendations.
    #   @return [Array<Types::VolumeRecommendation>]
    #
    # @!attribute [rw] errors
    #   An array of objects that describe errors of the request.
    #
    #   For example, an error is returned if you request recommendations for
    #   an unsupported volume.
    #   @return [Array<Types::GetRecommendationError>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetEBSVolumeRecommendationsResponse AWS API Documentation
    #
    class GetEBSVolumeRecommendationsResponse < Struct.new(
      :next_token,
      :volume_recommendations,
      :errors)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_arns
    #   The Amazon Resource Name (ARN) of the instances for which to return
    #   recommendations.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token to advance to the next page of instance recommendations.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of instance recommendations to return with a
    #   single request.
    #
    #   To retrieve the remaining results, make another request with the
    #   returned `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   An array of objects to specify a filter that returns a more specific
    #   list of instance recommendations.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] account_ids
    #   The ID of the Amazon Web Services account for which to return
    #   instance recommendations.
    #
    #   If your account is the management account of an organization, use
    #   this parameter to specify the member account for which you want to
    #   return instance recommendations.
    #
    #   Only one account ID can be specified per request.
    #   @return [Array<String>]
    #
    # @!attribute [rw] recommendation_preferences
    #   An object to specify the preferences for the Amazon EC2 instance
    #   recommendations to return in the response.
    #   @return [Types::RecommendationPreferences]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetEC2InstanceRecommendationsRequest AWS API Documentation
    #
    class GetEC2InstanceRecommendationsRequest < Struct.new(
      :instance_arns,
      :next_token,
      :max_results,
      :filters,
      :account_ids,
      :recommendation_preferences)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to advance to the next page of instance
    #   recommendations.
    #
    #   This value is null when there are no more pages of instance
    #   recommendations to return.
    #   @return [String]
    #
    # @!attribute [rw] instance_recommendations
    #   An array of objects that describe instance recommendations.
    #   @return [Array<Types::InstanceRecommendation>]
    #
    # @!attribute [rw] errors
    #   An array of objects that describe errors of the request.
    #
    #   For example, an error is returned if you request recommendations for
    #   an instance of an unsupported instance family.
    #   @return [Array<Types::GetRecommendationError>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetEC2InstanceRecommendationsResponse AWS API Documentation
    #
    class GetEC2InstanceRecommendationsResponse < Struct.new(
      :next_token,
      :instance_recommendations,
      :errors)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_arn
    #   The Amazon Resource Name (ARN) of the instances for which to return
    #   recommendation projected metrics.
    #   @return [String]
    #
    # @!attribute [rw] stat
    #   The statistic of the projected metrics.
    #   @return [String]
    #
    # @!attribute [rw] period
    #   The granularity, in seconds, of the projected metrics data points.
    #   @return [Integer]
    #
    # @!attribute [rw] start_time
    #   The timestamp of the first projected metrics data point to return.
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The timestamp of the last projected metrics data point to return.
    #   @return [Time]
    #
    # @!attribute [rw] recommendation_preferences
    #   An object to specify the preferences for the Amazon EC2
    #   recommendation projected metrics to return in the response.
    #   @return [Types::RecommendationPreferences]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetEC2RecommendationProjectedMetricsRequest AWS API Documentation
    #
    class GetEC2RecommendationProjectedMetricsRequest < Struct.new(
      :instance_arn,
      :stat,
      :period,
      :start_time,
      :end_time,
      :recommendation_preferences)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] recommended_option_projected_metrics
    #   An array of objects that describes projected metrics.
    #   @return [Array<Types::RecommendedOptionProjectedMetric>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetEC2RecommendationProjectedMetricsResponse AWS API Documentation
    #
    class GetEC2RecommendationProjectedMetricsResponse < Struct.new(
      :recommended_option_projected_metrics)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] service_arn
    #   The ARN that identifies the Amazon ECS service.
    #
    #   The following is the format of the ARN:
    #
    #   `arn:aws:ecs:region:aws_account_id:service/cluster-name/service-name`
    #   @return [String]
    #
    # @!attribute [rw] stat
    #   The statistic of the projected metrics.
    #   @return [String]
    #
    # @!attribute [rw] period
    #   The granularity, in seconds, of the projected metrics data points.
    #   @return [Integer]
    #
    # @!attribute [rw] start_time
    #   The timestamp of the first projected metrics data point to return.
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The timestamp of the last projected metrics data point to return.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetECSServiceRecommendationProjectedMetricsRequest AWS API Documentation
    #
    class GetECSServiceRecommendationProjectedMetricsRequest < Struct.new(
      :service_arn,
      :stat,
      :period,
      :start_time,
      :end_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] recommended_option_projected_metrics
    #   An array of objects that describes the projected metrics.
    #   @return [Array<Types::ECSServiceRecommendedOptionProjectedMetric>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetECSServiceRecommendationProjectedMetricsResponse AWS API Documentation
    #
    class GetECSServiceRecommendationProjectedMetricsResponse < Struct.new(
      :recommended_option_projected_metrics)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] service_arns
    #   The ARN that identifies the Amazon ECS service.
    #
    #   The following is the format of the ARN:
    #
    #   `arn:aws:ecs:region:aws_account_id:service/cluster-name/service-name`
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token to advance to the next page of Amazon ECS service
    #   recommendations.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of Amazon ECS service recommendations to return
    #   with a single request.
    #
    #   To retrieve the remaining results, make another request with the
    #   returned `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   An array of objects to specify a filter that returns a more specific
    #   list of Amazon ECS service recommendations.
    #   @return [Array<Types::ECSServiceRecommendationFilter>]
    #
    # @!attribute [rw] account_ids
    #   Return the Amazon ECS service recommendations to the specified
    #   Amazon Web Services account IDs.
    #
    #   If your account is the management account or the delegated
    #   administrator of an organization, use this parameter to return the
    #   Amazon ECS service recommendations to specific member accounts.
    #
    #   You can only specify one account ID per request.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetECSServiceRecommendationsRequest AWS API Documentation
    #
    class GetECSServiceRecommendationsRequest < Struct.new(
      :service_arns,
      :next_token,
      :max_results,
      :filters,
      :account_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to advance to the next page of Amazon ECS service
    #   recommendations.
    #   @return [String]
    #
    # @!attribute [rw] ecs_service_recommendations
    #   An array of objects that describe the Amazon ECS service
    #   recommendations.
    #   @return [Array<Types::ECSServiceRecommendation>]
    #
    # @!attribute [rw] errors
    #   An array of objects that describe errors of the request.
    #   @return [Array<Types::GetRecommendationError>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetECSServiceRecommendationsResponse AWS API Documentation
    #
    class GetECSServiceRecommendationsResponse < Struct.new(
      :next_token,
      :ecs_service_recommendations,
      :errors)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] resource_arn
    #   The Amazon Resource Name (ARN) of the resource for which to confirm
    #   effective recommendation preferences. Only EC2 instance and Auto
    #   Scaling group ARNs are currently supported.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetEffectiveRecommendationPreferencesRequest AWS API Documentation
    #
    class GetEffectiveRecommendationPreferencesRequest < Struct.new(
      :resource_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] enhanced_infrastructure_metrics
    #   The status of the enhanced infrastructure metrics recommendation
    #   preference. Considers all applicable preferences that you might have
    #   set at the resource, account, and organization level.
    #
    #   A status of `Active` confirms that the preference is applied in the
    #   latest recommendation refresh, and a status of `Inactive` confirms
    #   that it's not yet applied to recommendations.
    #
    #   To validate whether the preference is applied to your last generated
    #   set of recommendations, review the
    #   `effectiveRecommendationPreferences` value in the response of the
    #   GetAutoScalingGroupRecommendations and GetEC2InstanceRecommendations
    #   actions.
    #
    #   For more information, see [Enhanced infrastructure metrics][1] in
    #   the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html
    #   @return [String]
    #
    # @!attribute [rw] external_metrics_preference
    #   The provider of the external metrics recommendation preference.
    #   Considers all applicable preferences that you might have set at the
    #   account and organization level.
    #
    #   If the preference is applied in the latest recommendation refresh,
    #   an object with a valid `source` value appears in the response. If
    #   the preference isn't applied to the recommendations already, then
    #   this object doesn't appear in the response.
    #
    #   To validate whether the preference is applied to your last generated
    #   set of recommendations, review the
    #   `effectiveRecommendationPreferences` value in the response of the
    #   GetEC2InstanceRecommendations actions.
    #
    #   For more information, see [Enhanced infrastructure metrics][1] in
    #   the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/external-metrics-ingestion.html
    #   @return [Types::ExternalMetricsPreference]
    #
    # @!attribute [rw] look_back_period
    #   The number of days the utilization metrics of the Amazon Web
    #   Services resource are analyzed.
    #
    #   To validate that the preference is applied to your last generated
    #   set of recommendations, review the
    #   `effectiveRecommendationPreferences` value in the response of the
    #   GetAutoScalingGroupRecommendations or GetEC2InstanceRecommendations
    #   actions.
    #   @return [String]
    #
    # @!attribute [rw] utilization_preferences
    #   The resource’s CPU and memory utilization preferences, such as
    #   threshold and headroom, that were used to generate rightsizing
    #   recommendations. It considers all applicable preferences that you
    #   set at the resource, account, and organization level.
    #
    #   To validate that the preference is applied to your last generated
    #   set of recommendations, review the
    #   `effectiveRecommendationPreferences` value in the response of the
    #   GetAutoScalingGroupRecommendations or GetEC2InstanceRecommendations
    #   actions.
    #   @return [Array<Types::UtilizationPreference>]
    #
    # @!attribute [rw] preferred_resources
    #   The resource type values that are considered as candidates when
    #   generating rightsizing recommendations. This object resolves any
    #   wildcard expressions and returns the effective list of candidate
    #   resource type values. It also considers all applicable preferences
    #   that you set at the resource, account, and organization level.
    #
    #   To validate that the preference is applied to your last generated
    #   set of recommendations, review the
    #   `effectiveRecommendationPreferences` value in the response of the
    #   GetAutoScalingGroupRecommendations or GetEC2InstanceRecommendations
    #   actions.
    #   @return [Array<Types::EffectivePreferredResource>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetEffectiveRecommendationPreferencesResponse AWS API Documentation
    #
    class GetEffectiveRecommendationPreferencesResponse < Struct.new(
      :enhanced_infrastructure_metrics,
      :external_metrics_preference,
      :look_back_period,
      :utilization_preferences,
      :preferred_resources)
      SENSITIVE = []
      include Aws::Structure
    end

    # @api private
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetEnrollmentStatusRequest AWS API Documentation
    #
    class GetEnrollmentStatusRequest < Aws::EmptyStructure; end

    # @!attribute [rw] status
    #   The enrollment status of the account.
    #   @return [String]
    #
    # @!attribute [rw] status_reason
    #   The reason for the enrollment status of the account.
    #
    #   For example, an account might show a status of `Pending` because
    #   member accounts of an organization require more time to be enrolled
    #   in the service.
    #   @return [String]
    #
    # @!attribute [rw] member_accounts_enrolled
    #   Confirms the enrollment status of member accounts of the
    #   organization, if the account is a management account of an
    #   organization.
    #   @return [Boolean]
    #
    # @!attribute [rw] last_updated_timestamp
    #   The Unix epoch timestamp, in seconds, of when the account enrollment
    #   status was last updated.
    #   @return [Time]
    #
    # @!attribute [rw] number_of_member_accounts_opted_in
    #   The count of organization member accounts that are opted in to the
    #   service, if your account is an organization management account.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetEnrollmentStatusResponse AWS API Documentation
    #
    class GetEnrollmentStatusResponse < Struct.new(
      :status,
      :status_reason,
      :member_accounts_enrolled,
      :last_updated_timestamp,
      :number_of_member_accounts_opted_in)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] filters
    #   An array of objects to specify a filter that returns a more specific
    #   list of account enrollment statuses.
    #   @return [Array<Types::EnrollmentFilter>]
    #
    # @!attribute [rw] next_token
    #   The token to advance to the next page of account enrollment
    #   statuses.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of account enrollment statuses to return with a
    #   single request. You can specify up to 100 statuses to return with
    #   each request.
    #
    #   To retrieve the remaining results, make another request with the
    #   returned `nextToken` value.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetEnrollmentStatusesForOrganizationRequest AWS API Documentation
    #
    class GetEnrollmentStatusesForOrganizationRequest < Struct.new(
      :filters,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] account_enrollment_statuses
    #   An array of objects that describe the enrollment statuses of
    #   organization member accounts.
    #   @return [Array<Types::AccountEnrollmentStatus>]
    #
    # @!attribute [rw] next_token
    #   The token to use to advance to the next page of account enrollment
    #   statuses.
    #
    #   This value is null when there are no more pages of account
    #   enrollment statuses to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetEnrollmentStatusesForOrganizationResponse AWS API Documentation
    #
    class GetEnrollmentStatusesForOrganizationResponse < Struct.new(
      :account_enrollment_statuses,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] function_arns
    #   The Amazon Resource Name (ARN) of the functions for which to return
    #   recommendations.
    #
    #   You can specify a qualified or unqualified ARN. If you specify an
    #   unqualified ARN without a function version suffix, Compute Optimizer
    #   will return recommendations for the latest (`$LATEST`) version of
    #   the function. If you specify a qualified ARN with a version suffix,
    #   Compute Optimizer will return recommendations for the specified
    #   function version. For more information about using function
    #   versions, see [Using versions][1] in the *Lambda Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html#versioning-versions-using
    #   @return [Array<String>]
    #
    # @!attribute [rw] account_ids
    #   The ID of the Amazon Web Services account for which to return
    #   function recommendations.
    #
    #   If your account is the management account of an organization, use
    #   this parameter to specify the member account for which you want to
    #   return function recommendations.
    #
    #   Only one account ID can be specified per request.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   An array of objects to specify a filter that returns a more specific
    #   list of function recommendations.
    #   @return [Array<Types::LambdaFunctionRecommendationFilter>]
    #
    # @!attribute [rw] next_token
    #   The token to advance to the next page of function recommendations.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of function recommendations to return with a
    #   single request.
    #
    #   To retrieve the remaining results, make another request with the
    #   returned `nextToken` value.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetLambdaFunctionRecommendationsRequest AWS API Documentation
    #
    class GetLambdaFunctionRecommendationsRequest < Struct.new(
      :function_arns,
      :account_ids,
      :filters,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to advance to the next page of function
    #   recommendations.
    #
    #   This value is null when there are no more pages of function
    #   recommendations to return.
    #   @return [String]
    #
    # @!attribute [rw] lambda_function_recommendations
    #   An array of objects that describe function recommendations.
    #   @return [Array<Types::LambdaFunctionRecommendation>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetLambdaFunctionRecommendationsResponse AWS API Documentation
    #
    class GetLambdaFunctionRecommendationsResponse < Struct.new(
      :next_token,
      :lambda_function_recommendations)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] resource_arns
    #   The ARN that identifies the Amazon EC2 instance.
    #
    #   The following is the format of the ARN:
    #
    #   `arn:aws:ec2:region:aws_account_id:instance/instance-id`
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token to advance to the next page of license recommendations.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of license recommendations to return with a
    #   single request.
    #
    #   To retrieve the remaining results, make another request with the
    #   returned `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   An array of objects to specify a filter that returns a more specific
    #   list of license recommendations.
    #   @return [Array<Types::LicenseRecommendationFilter>]
    #
    # @!attribute [rw] account_ids
    #   The ID of the Amazon Web Services account for which to return
    #   license recommendations.
    #
    #   If your account is the management account of an organization, use
    #   this parameter to specify the member account for which you want to
    #   return license recommendations.
    #
    #   Only one account ID can be specified per request.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetLicenseRecommendationsRequest AWS API Documentation
    #
    class GetLicenseRecommendationsRequest < Struct.new(
      :resource_arns,
      :next_token,
      :max_results,
      :filters,
      :account_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to advance to the next page of license
    #   recommendations.
    #   @return [String]
    #
    # @!attribute [rw] license_recommendations
    #   An array of objects that describe license recommendations.
    #   @return [Array<Types::LicenseRecommendation>]
    #
    # @!attribute [rw] errors
    #   An array of objects that describe errors of the request.
    #   @return [Array<Types::GetRecommendationError>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetLicenseRecommendationsResponse AWS API Documentation
    #
    class GetLicenseRecommendationsResponse < Struct.new(
      :next_token,
      :license_recommendations,
      :errors)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] resource_arn
    #   The ARN that identifies the Amazon RDS.
    #
    #   The following is the format of the ARN:
    #
    #   `arn:aws:rds:{region}:{accountId}:db:{resourceName}`
    #   @return [String]
    #
    # @!attribute [rw] stat
    #   The statistic of the projected metrics.
    #   @return [String]
    #
    # @!attribute [rw] period
    #   The granularity, in seconds, of the projected metrics data points.
    #   @return [Integer]
    #
    # @!attribute [rw] start_time
    #   The timestamp of the first projected metrics data point to return.
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The timestamp of the last projected metrics data point to return.
    #   @return [Time]
    #
    # @!attribute [rw] recommendation_preferences
    #   Describes the recommendation preferences to return in the response
    #   of a GetAutoScalingGroupRecommendations,
    #   GetEC2InstanceRecommendations, GetEC2RecommendationProjectedMetrics,
    #   GetRDSDatabaseRecommendations, and
    #   GetRDSDatabaseRecommendationProjectedMetrics request.
    #   @return [Types::RecommendationPreferences]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetRDSDatabaseRecommendationProjectedMetricsRequest AWS API Documentation
    #
    class GetRDSDatabaseRecommendationProjectedMetricsRequest < Struct.new(
      :resource_arn,
      :stat,
      :period,
      :start_time,
      :end_time,
      :recommendation_preferences)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] recommended_option_projected_metrics
    #   An array of objects that describes the projected metrics.
    #   @return [Array<Types::RDSDatabaseRecommendedOptionProjectedMetric>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetRDSDatabaseRecommendationProjectedMetricsResponse AWS API Documentation
    #
    class GetRDSDatabaseRecommendationProjectedMetricsResponse < Struct.new(
      :recommended_option_projected_metrics)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] resource_arns
    #   The ARN that identifies the Amazon RDS.
    #
    #   The following is the format of the ARN:
    #
    #   `arn:aws:rds:{region}:{accountId}:db:{resourceName}`
    #
    #   The following is the format of a DB Cluster ARN:
    #
    #   `arn:aws:rds:{region}:{accountId}:cluster:{resourceName}`
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token to advance to the next page of Amazon RDS recommendations.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of Amazon RDS recommendations to return with a
    #   single request.
    #
    #   To retrieve the remaining results, make another request with the
    #   returned `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   An array of objects to specify a filter that returns a more specific
    #   list of Amazon RDS recommendations.
    #   @return [Array<Types::RDSDBRecommendationFilter>]
    #
    # @!attribute [rw] account_ids
    #   Return the Amazon RDS recommendations to the specified Amazon Web
    #   Services account IDs.
    #
    #   If your account is the management account or the delegated
    #   administrator of an organization, use this parameter to return the
    #   Amazon RDS recommendations to specific member accounts.
    #
    #   You can only specify one account ID per request.
    #   @return [Array<String>]
    #
    # @!attribute [rw] recommendation_preferences
    #   Describes the recommendation preferences to return in the response
    #   of a GetAutoScalingGroupRecommendations,
    #   GetEC2InstanceRecommendations, GetEC2RecommendationProjectedMetrics,
    #   GetRDSDatabaseRecommendations, and
    #   GetRDSDatabaseRecommendationProjectedMetrics request.
    #   @return [Types::RecommendationPreferences]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetRDSDatabaseRecommendationsRequest AWS API Documentation
    #
    class GetRDSDatabaseRecommendationsRequest < Struct.new(
      :resource_arns,
      :next_token,
      :max_results,
      :filters,
      :account_ids,
      :recommendation_preferences)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to advance to the next page of Amazon RDS recommendations.
    #   @return [String]
    #
    # @!attribute [rw] rds_db_recommendations
    #   An array of objects that describe the Amazon RDS recommendations.
    #   @return [Array<Types::RDSDBRecommendation>]
    #
    # @!attribute [rw] errors
    #   An array of objects that describe errors of the request.
    #   @return [Array<Types::GetRecommendationError>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetRDSDatabaseRecommendationsResponse AWS API Documentation
    #
    class GetRDSDatabaseRecommendationsResponse < Struct.new(
      :next_token,
      :rds_db_recommendations,
      :errors)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an error experienced when getting recommendations.
    #
    # For example, an error is returned if you request recommendations for
    # an unsupported Auto Scaling group, or if you request recommendations
    # for an instance of an unsupported instance family.
    #
    # @!attribute [rw] identifier
    #   The ID of the error.
    #   @return [String]
    #
    # @!attribute [rw] code
    #   The error code.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The message, or reason, for the error.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetRecommendationError AWS API Documentation
    #
    class GetRecommendationError < Struct.new(
      :identifier,
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] resource_type
    #   The target resource type of the recommendation preference for which
    #   to return preferences.
    #
    #   The `Ec2Instance` option encompasses standalone instances and
    #   instances that are part of Auto Scaling groups. The
    #   `AutoScalingGroup` option encompasses only instances that are part
    #   of an Auto Scaling group.
    #   @return [String]
    #
    # @!attribute [rw] scope
    #   An object that describes the scope of the recommendation preference
    #   to return.
    #
    #   You can return recommendation preferences that are created at the
    #   organization level (for management accounts of an organization
    #   only), account level, and resource level. For more information, see
    #   [Activating enhanced infrastructure metrics][1] in the *Compute
    #   Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html
    #   @return [Types::Scope]
    #
    # @!attribute [rw] next_token
    #   The token to advance to the next page of recommendation preferences.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of recommendation preferences to return with a
    #   single request.
    #
    #   To retrieve the remaining results, make another request with the
    #   returned `nextToken` value.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetRecommendationPreferencesRequest AWS API Documentation
    #
    class GetRecommendationPreferencesRequest < Struct.new(
      :resource_type,
      :scope,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to advance to the next page of recommendation
    #   preferences.
    #
    #   This value is null when there are no more pages of recommendation
    #   preferences to return.
    #   @return [String]
    #
    # @!attribute [rw] recommendation_preferences_details
    #   An array of objects that describe recommendation preferences.
    #   @return [Array<Types::RecommendationPreferencesDetail>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetRecommendationPreferencesResponse AWS API Documentation
    #
    class GetRecommendationPreferencesResponse < Struct.new(
      :next_token,
      :recommendation_preferences_details)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] account_ids
    #   The ID of the Amazon Web Services account for which to return
    #   recommendation summaries.
    #
    #   If your account is the management account of an organization, use
    #   this parameter to specify the member account for which you want to
    #   return recommendation summaries.
    #
    #   Only one account ID can be specified per request.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token to advance to the next page of recommendation summaries.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of recommendation summaries to return with a
    #   single request.
    #
    #   To retrieve the remaining results, make another request with the
    #   returned `nextToken` value.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetRecommendationSummariesRequest AWS API Documentation
    #
    class GetRecommendationSummariesRequest < Struct.new(
      :account_ids,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to advance to the next page of recommendation
    #   summaries.
    #
    #   This value is null when there are no more pages of recommendation
    #   summaries to return.
    #   @return [String]
    #
    # @!attribute [rw] recommendation_summaries
    #   An array of objects that summarize a recommendation.
    #   @return [Array<Types::RecommendationSummary>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetRecommendationSummariesResponse AWS API Documentation
    #
    class GetRecommendationSummariesResponse < Struct.new(
      :next_token,
      :recommendation_summaries)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the GPU accelerators for the instance type.
    #
    # @!attribute [rw] gpu_count
    #   The number of GPUs for the instance type.
    #   @return [Integer]
    #
    # @!attribute [rw] gpu_memory_size_in_mi_b
    #   The total size of the memory for the GPU accelerators for the
    #   instance type, in MiB.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/Gpu AWS API Documentation
    #
    class Gpu < Struct.new(
      :gpu_count,
      :gpu_memory_size_in_mi_b)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the GPU accelerator settings for the instance type.
    #
    # @!attribute [rw] gpus
    #   Describes the GPU accelerators for the instance type.
    #   @return [Array<Types::Gpu>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GpuInfo AWS API Documentation
    #
    class GpuInfo < Struct.new(
      :gpus)
      SENSITIVE = []
      include Aws::Structure
    end

    # The estimated monthly savings after you adjust the configurations of
    # your instances running on the inferred workload types to the
    # recommended configurations. If the `inferredWorkloadTypes` list
    # contains multiple entries, then the savings are the sum of the monthly
    # savings from instances that run the exact combination of the inferred
    # workload types.
    #
    # @!attribute [rw] inferred_workload_types
    #   The applications that might be running on the instance as inferred
    #   by Compute Optimizer.
    #
    #   Compute Optimizer can infer if one of the following applications
    #   might be running on the instance:
    #
    #   * `AmazonEmr` - Infers that Amazon EMR might be running on the
    #     instance.
    #
    #   * `ApacheCassandra` - Infers that Apache Cassandra might be running
    #     on the instance.
    #
    #   * `ApacheHadoop` - Infers that Apache Hadoop might be running on the
    #     instance.
    #
    #   * `Memcached` - Infers that Memcached might be running on the
    #     instance.
    #
    #   * `NGINX` - Infers that NGINX might be running on the instance.
    #
    #   * `PostgreSql` - Infers that PostgreSQL might be running on the
    #     instance.
    #
    #   * `Redis` - Infers that Redis might be running on the instance.
    #
    #   * `Kafka` - Infers that Kafka might be running on the instance.
    #
    #   * `SQLServer` - Infers that SQLServer might be running on the
    #     instance.
    #   @return [Array<String>]
    #
    # @!attribute [rw] estimated_monthly_savings
    #   An object that describes the estimated monthly savings amount
    #   possible by adopting Compute Optimizer recommendations for a given
    #   resource. This is based on the On-Demand instance pricing.
    #   @return [Types::EstimatedMonthlySavings]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/InferredWorkloadSaving AWS API Documentation
    #
    class InferredWorkloadSaving < Struct.new(
      :inferred_workload_types,
      :estimated_monthly_savings)
      SENSITIVE = []
      include Aws::Structure
    end

    # An object that describes the estimated monthly savings possible by
    # adopting Compute Optimizer’s Amazon EC2 instance recommendations. This
    # is based on the Savings Plans and Reserved Instances pricing
    # discounts.
    #
    # @!attribute [rw] currency
    #   The currency of the estimated monthly savings.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the estimated monthly savings.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/InstanceEstimatedMonthlySavings AWS API Documentation
    #
    class InstanceEstimatedMonthlySavings < Struct.new(
      :currency,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an Amazon EC2 instance recommendation.
    #
    # @!attribute [rw] instance_arn
    #   The Amazon Resource Name (ARN) of the current instance.
    #   @return [String]
    #
    # @!attribute [rw] account_id
    #   The Amazon Web Services account ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] instance_name
    #   The name of the current instance.
    #   @return [String]
    #
    # @!attribute [rw] current_instance_type
    #   The instance type of the current instance.
    #   @return [String]
    #
    # @!attribute [rw] finding
    #   The finding classification of the instance.
    #
    #   Findings for instances include:
    #
    #   * <b> <code>Underprovisioned</code> </b>—An instance is considered
    #     under-provisioned when at least one specification of your
    #     instance, such as CPU, memory, or network, does not meet the
    #     performance requirements of your workload. Under-provisioned
    #     instances may lead to poor application performance.
    #
    #   * <b> <code>Overprovisioned</code> </b>—An instance is considered
    #     over-provisioned when at least one specification of your instance,
    #     such as CPU, memory, or network, can be sized down while still
    #     meeting the performance requirements of your workload, and no
    #     specification is under-provisioned. Over-provisioned instances may
    #     lead to unnecessary infrastructure cost.
    #
    #   * <b> <code>Optimized</code> </b>—An instance is considered
    #     optimized when all specifications of your instance, such as CPU,
    #     memory, and network, meet the performance requirements of your
    #     workload and is not over provisioned. For optimized resources,
    #     Compute Optimizer might recommend a new generation instance type.
    #
    #   <note markdown="1"> The valid values in your API responses appear as OVER\_PROVISIONED,
    #   UNDER\_PROVISIONED, or OPTIMIZED.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] finding_reason_codes
    #   The reason for the finding classification of the instance.
    #
    #   Finding reason codes for instances include:
    #
    #   * <b> <code>CPUOverprovisioned</code> </b> — The instance’s CPU
    #     configuration can be sized down while still meeting the
    #     performance requirements of your workload. This is identified by
    #     analyzing the `CPUUtilization` metric of the current instance
    #     during the look-back period.
    #
    #   * <b> <code>CPUUnderprovisioned</code> </b> — The instance’s CPU
    #     configuration doesn't meet the performance requirements of your
    #     workload and there is an alternative instance type that provides
    #     better CPU performance. This is identified by analyzing the
    #     `CPUUtilization` metric of the current instance during the
    #     look-back period.
    #
    #   * <b> <code>MemoryOverprovisioned</code> </b> — The instance’s
    #     memory configuration can be sized down while still meeting the
    #     performance requirements of your workload. This is identified by
    #     analyzing the memory utilization metric of the current instance
    #     during the look-back period.
    #
    #   * <b> <code>MemoryUnderprovisioned</code> </b> — The instance’s
    #     memory configuration doesn't meet the performance requirements of
    #     your workload and there is an alternative instance type that
    #     provides better memory performance. This is identified by
    #     analyzing the memory utilization metric of the current instance
    #     during the look-back period.
    #
    #     <note markdown="1"> Memory utilization is analyzed only for resources that have the
    #     unified CloudWatch agent installed on them. For more information,
    #     see [Enabling memory utilization with the Amazon CloudWatch
    #     Agent][1] in the *Compute Optimizer User Guide*. On Linux
    #     instances, Compute Optimizer analyses the `mem_used_percent`
    #     metric in the `CWAgent` namespace, or the legacy
    #     `MemoryUtilization` metric in the `System/Linux` namespace. On
    #     Windows instances, Compute Optimizer analyses the `Memory %
    #     Committed Bytes In Use` metric in the `CWAgent` namespace.
    #
    #      </note>
    #
    #   * <b> <code>EBSThroughputOverprovisioned</code> </b> — The
    #     instance’s EBS throughput configuration can be sized down while
    #     still meeting the performance requirements of your workload. This
    #     is identified by analyzing the `VolumeReadBytes` and
    #     `VolumeWriteBytes` metrics of EBS volumes attached to the current
    #     instance during the look-back period.
    #
    #   * <b> <code>EBSThroughputUnderprovisioned</code> </b> — The
    #     instance’s EBS throughput configuration doesn't meet the
    #     performance requirements of your workload and there is an
    #     alternative instance type that provides better EBS throughput
    #     performance. This is identified by analyzing the `VolumeReadBytes`
    #     and `VolumeWriteBytes` metrics of EBS volumes attached to the
    #     current instance during the look-back period.
    #
    #   * <b> <code>EBSIOPSOverprovisioned</code> </b> — The instance’s EBS
    #     IOPS configuration can be sized down while still meeting the
    #     performance requirements of your workload. This is identified by
    #     analyzing the `VolumeReadOps` and `VolumeWriteOps` metric of EBS
    #     volumes attached to the current instance during the look-back
    #     period.
    #
    #   * <b> <code>EBSIOPSUnderprovisioned</code> </b> — The instance’s EBS
    #     IOPS configuration doesn't meet the performance requirements of
    #     your workload and there is an alternative instance type that
    #     provides better EBS IOPS performance. This is identified by
    #     analyzing the `VolumeReadOps` and `VolumeWriteOps` metric of EBS
    #     volumes attached to the current instance during the look-back
    #     period.
    #
    #   * <b> <code>NetworkBandwidthOverprovisioned</code> </b> — The
    #     instance’s network bandwidth configuration can be sized down while
    #     still meeting the performance requirements of your workload. This
    #     is identified by analyzing the `NetworkIn` and `NetworkOut`
    #     metrics of the current instance during the look-back period.
    #
    #   * <b> <code>NetworkBandwidthUnderprovisioned</code> </b> — The
    #     instance’s network bandwidth configuration doesn't meet the
    #     performance requirements of your workload and there is an
    #     alternative instance type that provides better network bandwidth
    #     performance. This is identified by analyzing the `NetworkIn` and
    #     `NetworkOut` metrics of the current instance during the look-back
    #     period. This finding reason happens when the `NetworkIn` or
    #     `NetworkOut` performance of an instance is impacted.
    #
    #   * <b> <code>NetworkPPSOverprovisioned</code> </b> — The instance’s
    #     network PPS (packets per second) configuration can be sized down
    #     while still meeting the performance requirements of your workload.
    #     This is identified by analyzing the `NetworkPacketsIn` and
    #     `NetworkPacketsIn` metrics of the current instance during the
    #     look-back period.
    #
    #   * <b> <code>NetworkPPSUnderprovisioned</code> </b> — The instance’s
    #     network PPS (packets per second) configuration doesn't meet the
    #     performance requirements of your workload and there is an
    #     alternative instance type that provides better network PPS
    #     performance. This is identified by analyzing the
    #     `NetworkPacketsIn` and `NetworkPacketsIn` metrics of the current
    #     instance during the look-back period.
    #
    #   * <b> <code>DiskIOPSOverprovisioned</code> </b> — The instance’s
    #     disk IOPS configuration can be sized down while still meeting the
    #     performance requirements of your workload. This is identified by
    #     analyzing the `DiskReadOps` and `DiskWriteOps` metrics of the
    #     current instance during the look-back period.
    #
    #   * <b> <code>DiskIOPSUnderprovisioned</code> </b> — The instance’s
    #     disk IOPS configuration doesn't meet the performance requirements
    #     of your workload and there is an alternative instance type that
    #     provides better disk IOPS performance. This is identified by
    #     analyzing the `DiskReadOps` and `DiskWriteOps` metrics of the
    #     current instance during the look-back period.
    #
    #   * <b> <code>DiskThroughputOverprovisioned</code> </b> — The
    #     instance’s disk throughput configuration can be sized down while
    #     still meeting the performance requirements of your workload. This
    #     is identified by analyzing the `DiskReadBytes` and
    #     `DiskWriteBytes` metrics of the current instance during the
    #     look-back period.
    #
    #   * <b> <code>DiskThroughputUnderprovisioned</code> </b> — The
    #     instance’s disk throughput configuration doesn't meet the
    #     performance requirements of your workload and there is an
    #     alternative instance type that provides better disk throughput
    #     performance. This is identified by analyzing the `DiskReadBytes`
    #     and `DiskWriteBytes` metrics of the current instance during the
    #     look-back period.
    #
    #   <note markdown="1"> For more information about instance metrics, see [List the available
    #   CloudWatch metrics for your instances][2] in the *Amazon Elastic
    #   Compute Cloud User Guide*. For more information about EBS volume
    #   metrics, see [Amazon CloudWatch metrics for Amazon EBS][3] in the
    #   *Amazon Elastic Compute Cloud User Guide*.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html
    #   [3]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using_cloudwatch_ebs.html
    #   @return [Array<String>]
    #
    # @!attribute [rw] utilization_metrics
    #   An array of objects that describe the utilization metrics of the
    #   instance.
    #   @return [Array<Types::UtilizationMetric>]
    #
    # @!attribute [rw] look_back_period_in_days
    #   The number of days for which utilization metrics were analyzed for
    #   the instance.
    #   @return [Float]
    #
    # @!attribute [rw] recommendation_options
    #   An array of objects that describe the recommendation options for the
    #   instance.
    #   @return [Array<Types::InstanceRecommendationOption>]
    #
    # @!attribute [rw] recommendation_sources
    #   An array of objects that describe the source resource of the
    #   recommendation.
    #   @return [Array<Types::RecommendationSource>]
    #
    # @!attribute [rw] last_refresh_timestamp
    #   The timestamp of when the instance recommendation was last
    #   generated.
    #   @return [Time]
    #
    # @!attribute [rw] current_performance_risk
    #   The risk of the current instance not meeting the performance needs
    #   of its workloads. The higher the risk, the more likely the current
    #   instance cannot meet the performance requirements of its workload.
    #   @return [String]
    #
    # @!attribute [rw] effective_recommendation_preferences
    #   An object that describes the effective recommendation preferences
    #   for the instance.
    #   @return [Types::EffectiveRecommendationPreferences]
    #
    # @!attribute [rw] inferred_workload_types
    #   The applications that might be running on the instance as inferred
    #   by Compute Optimizer.
    #
    #   Compute Optimizer can infer if one of the following applications
    #   might be running on the instance:
    #
    #   * `AmazonEmr` - Infers that Amazon EMR might be running on the
    #     instance.
    #
    #   * `ApacheCassandra` - Infers that Apache Cassandra might be running
    #     on the instance.
    #
    #   * `ApacheHadoop` - Infers that Apache Hadoop might be running on the
    #     instance.
    #
    #   * `Memcached` - Infers that Memcached might be running on the
    #     instance.
    #
    #   * `NGINX` - Infers that NGINX might be running on the instance.
    #
    #   * `PostgreSql` - Infers that PostgreSQL might be running on the
    #     instance.
    #
    #   * `Redis` - Infers that Redis might be running on the instance.
    #
    #   * `Kafka` - Infers that Kafka might be running on the instance.
    #
    #   * `SQLServer` - Infers that SQLServer might be running on the
    #     instance.
    #   @return [Array<String>]
    #
    # @!attribute [rw] instance_state
    #   The state of the instance when the recommendation was generated.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   A list of tags assigned to your Amazon EC2 instance recommendations.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] external_metric_status
    #   An object that describes Compute Optimizer's integration status
    #   with your external metrics provider.
    #   @return [Types::ExternalMetricStatus]
    #
    # @!attribute [rw] current_instance_gpu_info
    #   Describes the GPU accelerator settings for the current instance
    #   type.
    #   @return [Types::GpuInfo]
    #
    # @!attribute [rw] idle
    #   Describes if an Amazon EC2 instance is idle.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/InstanceRecommendation AWS API Documentation
    #
    class InstanceRecommendation < Struct.new(
      :instance_arn,
      :account_id,
      :instance_name,
      :current_instance_type,
      :finding,
      :finding_reason_codes,
      :utilization_metrics,
      :look_back_period_in_days,
      :recommendation_options,
      :recommendation_sources,
      :last_refresh_timestamp,
      :current_performance_risk,
      :effective_recommendation_preferences,
      :inferred_workload_types,
      :instance_state,
      :tags,
      :external_metric_status,
      :current_instance_gpu_info,
      :idle)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a recommendation option for an Amazon EC2 instance.
    #
    # @!attribute [rw] instance_type
    #   The instance type of the instance recommendation.
    #   @return [String]
    #
    # @!attribute [rw] instance_gpu_info
    #   Describes the GPU accelerator settings for the recommended instance
    #   type.
    #   @return [Types::GpuInfo]
    #
    # @!attribute [rw] projected_utilization_metrics
    #   An array of objects that describe the projected utilization metrics
    #   of the instance recommendation option.
    #
    #   <note markdown="1"> The `Cpu` and `Memory` metrics are the only projected utilization
    #   metrics returned. Additionally, the `Memory` metric is returned only
    #   for resources that have the unified CloudWatch agent installed on
    #   them. For more information, see [Enabling Memory Utilization with
    #   the CloudWatch Agent][1].
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent
    #   @return [Array<Types::UtilizationMetric>]
    #
    # @!attribute [rw] platform_differences
    #   Describes the configuration differences between the current instance
    #   and the recommended instance type. You should consider the
    #   configuration differences before migrating your workloads from the
    #   current instance to the recommended instance type. The [Change the
    #   instance type guide for Linux][1] and [Change the instance type
    #   guide for Windows][2] provide general guidance for getting started
    #   with an instance migration.
    #
    #   Platform differences include:
    #
    #   * <b> <code>Hypervisor</code> </b> — The hypervisor of the
    #     recommended instance type is different than that of the current
    #     instance. For example, the recommended instance type uses a Nitro
    #     hypervisor and the current instance uses a Xen hypervisor. The
    #     differences that you should consider between these hypervisors are
    #     covered in the [Nitro Hypervisor][3] section of the Amazon EC2
    #     frequently asked questions. For more information, see [Instances
    #     built on the Nitro System][4] in the *Amazon EC2 User Guide for
    #     Linux*, or [Instances built on the Nitro System][5] in the *Amazon
    #     EC2 User Guide for Windows*.
    #
    #   * <b> <code>NetworkInterface</code> </b> — The network interface of
    #     the recommended instance type is different than that of the
    #     current instance. For example, the recommended instance type
    #     supports enhanced networking and the current instance might not.
    #     To enable enhanced networking for the recommended instance type,
    #     you must install the Elastic Network Adapter (ENA) driver or the
    #     Intel 82599 Virtual Function driver. For more information, see
    #     [Networking and storage features][6] and [Enhanced networking on
    #     Linux][7] in the *Amazon EC2 User Guide for Linux*, or [Networking
    #     and storage features][8] and [Enhanced networking on Windows][9]
    #     in the *Amazon EC2 User Guide for Windows*.
    #
    #   * <b> <code>StorageInterface</code> </b> — The storage interface of
    #     the recommended instance type is different than that of the
    #     current instance. For example, the recommended instance type uses
    #     an NVMe storage interface and the current instance does not. To
    #     access NVMe volumes for the recommended instance type, you will
    #     need to install or upgrade the NVMe driver. For more information,
    #     see [Networking and storage features][6] and [Amazon EBS and NVMe
    #     on Linux instances][10] in the *Amazon EC2 User Guide for Linux*,
    #     or [Networking and storage features][8] and [Amazon EBS and NVMe
    #     on Windows instances][11] in the *Amazon EC2 User Guide for
    #     Windows*.
    #
    #   * <b> <code>InstanceStoreAvailability</code> </b> — The recommended
    #     instance type does not support instance store volumes and the
    #     current instance does. Before migrating, you might need to back up
    #     the data on your instance store volumes if you want to preserve
    #     them. For more information, see [How do I back up an instance
    #     store volume on my Amazon EC2 instance to Amazon EBS?][12] in the
    #     *Amazon Web Services Premium Support Knowledge Base*. For more
    #     information, see [Networking and storage features][6] and [Amazon
    #     EC2 instance store][13] in the *Amazon EC2 User Guide for Linux*,
    #     or see [Networking and storage features][8] and [Amazon EC2
    #     instance store][14] in the *Amazon EC2 User Guide for Windows*.
    #
    #   * <b> <code>VirtualizationType</code> </b> — The recommended
    #     instance type uses the hardware virtual machine (HVM)
    #     virtualization type and the current instance uses the paravirtual
    #     (PV) virtualization type. For more information about the
    #     differences between these virtualization types, see [Linux AMI
    #     virtualization types][15] in the *Amazon EC2 User Guide for
    #     Linux*, or [Windows AMI virtualization types][16] in the *Amazon
    #     EC2 User Guide for Windows*.
    #
    #   * <b> <code>Architecture</code> </b> — The CPU architecture between
    #     the recommended instance type and the current instance is
    #     different. For example, the recommended instance type might use an
    #     Arm CPU architecture and the current instance type might use a
    #     different one, such as x86. Before migrating, you should consider
    #     recompiling the software on your instance for the new
    #     architecture. Alternatively, you might switch to an Amazon Machine
    #     Image (AMI) that supports the new architecture. For more
    #     information about the CPU architecture for each instance type, see
    #     [Amazon EC2 Instance Types][17].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-resize.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-resize.html
    #   [3]: http://aws.amazon.com/ec2/faqs/#Nitro_Hypervisor
    #   [4]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances
    #   [5]: https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instance-types.html#ec2-nitro-instances
    #   [6]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#instance-networking-storage
    #   [7]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html
    #   [8]: https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instance-types.html#instance-networking-storage
    #   [9]: https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/enhanced-networking.html
    #   [10]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nvme-ebs-volumes.html
    #   [11]: https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/nvme-ebs-volumes.html
    #   [12]: https://aws.amazon.com/premiumsupport/knowledge-center/back-up-instance-store-ebs/
    #   [13]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html
    #   [14]: https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/InstanceStorage.html
    #   [15]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html
    #   [16]: https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/windows-ami-version-history.html#virtualization-types
    #   [17]: http://aws.amazon.com/ec2/instance-types/
    #   @return [Array<String>]
    #
    # @!attribute [rw] performance_risk
    #   The performance risk of the instance recommendation option.
    #
    #   Performance risk indicates the likelihood of the recommended
    #   instance type not meeting the resource needs of your workload.
    #   Compute Optimizer calculates an individual performance risk score
    #   for each specification of the recommended instance, including CPU,
    #   memory, EBS throughput, EBS IOPS, disk throughput, disk IOPS,
    #   network throughput, and network PPS. The performance risk of the
    #   recommended instance is calculated as the maximum performance risk
    #   score across the analyzed resource specifications.
    #
    #   The value ranges from `0` - `4`, with `0` meaning that the
    #   recommended resource is predicted to always provide enough hardware
    #   capability. The higher the performance risk is, the more likely you
    #   should validate whether the recommendation will meet the performance
    #   requirements of your workload before migrating your resource.
    #   @return [Float]
    #
    # @!attribute [rw] rank
    #   The rank of the instance recommendation option.
    #
    #   The top recommendation option is ranked as `1`.
    #   @return [Integer]
    #
    # @!attribute [rw] savings_opportunity
    #   An object that describes the savings opportunity for the instance
    #   recommendation option. Savings opportunity includes the estimated
    #   monthly savings amount and percentage.
    #   @return [Types::SavingsOpportunity]
    #
    # @!attribute [rw] savings_opportunity_after_discounts
    #   An object that describes the savings opportunity for the instance
    #   recommendation option that includes Savings Plans and Reserved
    #   Instances discounts. Savings opportunity includes the estimated
    #   monthly savings and percentage.
    #   @return [Types::InstanceSavingsOpportunityAfterDiscounts]
    #
    # @!attribute [rw] migration_effort
    #   The level of effort required to migrate from the current instance
    #   type to the recommended instance type.
    #
    #   For example, the migration effort is `Low` if Amazon EMR is the
    #   inferred workload type and an Amazon Web Services Graviton instance
    #   type is recommended. The migration effort is `Medium` if a workload
    #   type couldn't be inferred but an Amazon Web Services Graviton
    #   instance type is recommended. The migration effort is `VeryLow` if
    #   both the current and recommended instance types are of the same CPU
    #   architecture.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/InstanceRecommendationOption AWS API Documentation
    #
    class InstanceRecommendationOption < Struct.new(
      :instance_type,
      :instance_gpu_info,
      :projected_utilization_metrics,
      :platform_differences,
      :performance_risk,
      :rank,
      :savings_opportunity,
      :savings_opportunity_after_discounts,
      :migration_effort)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the savings estimation mode used for calculating savings
    # opportunity for Amazon EC2 instances.
    #
    # @!attribute [rw] source
    #   Describes the source for calculating the savings opportunity for
    #   Amazon EC2 instances.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/InstanceSavingsEstimationMode AWS API Documentation
    #
    class InstanceSavingsEstimationMode < Struct.new(
      :source)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the savings opportunity for instance recommendations after
    # applying the Savings Plans and Reserved Instances discounts.
    #
    # Savings opportunity after discounts represents the estimated monthly
    # savings you can achieve by implementing Compute Optimizer
    # recommendations.
    #
    # @!attribute [rw] savings_opportunity_percentage
    #   The estimated monthly savings possible as a percentage of monthly
    #   cost after applying the Savings Plans and Reserved Instances
    #   discounts. This saving can be achieved by adopting Compute
    #   Optimizer’s EC2 instance recommendations.
    #   @return [Float]
    #
    # @!attribute [rw] estimated_monthly_savings
    #   An object that describes the estimated monthly savings possible by
    #   adopting Compute Optimizer’s Amazon EC2 instance recommendations.
    #   This is based on pricing after applying the Savings Plans and
    #   Reserved Instances discounts.
    #   @return [Types::InstanceEstimatedMonthlySavings]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/InstanceSavingsOpportunityAfterDiscounts AWS API Documentation
    #
    class InstanceSavingsOpportunityAfterDiscounts < Struct.new(
      :savings_opportunity_percentage,
      :estimated_monthly_savings)
      SENSITIVE = []
      include Aws::Structure
    end

    # An internal error has occurred. Try your call again.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/InternalServerException AWS API Documentation
    #
    class InternalServerException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The value supplied for the input parameter is out of range or not
    # valid.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/InvalidParameterValueException AWS API Documentation
    #
    class InvalidParameterValueException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a filter that returns a more specific list of recommendation
    # export jobs. Use this filter with the DescribeRecommendationExportJobs
    # action.
    #
    # You can use `EBSFilter` with the GetEBSVolumeRecommendations action,
    # `LambdaFunctionRecommendationFilter` with the
    # GetLambdaFunctionRecommendations action, and `Filter` with the
    # GetAutoScalingGroupRecommendations and GetEC2InstanceRecommendations
    # actions.
    #
    # @!attribute [rw] name
    #   The name of the filter.
    #
    #   Specify `ResourceType` to return export jobs of a specific resource
    #   type (for example, `Ec2Instance`).
    #
    #   Specify `JobStatus` to return export jobs with a specific status
    #   (e.g, `Complete`).
    #   @return [String]
    #
    # @!attribute [rw] values
    #   The value of the filter.
    #
    #   The valid values for this parameter are as follows, depending on
    #   what you specify for the `name` parameter:
    #
    #   * Specify `Ec2Instance` or `AutoScalingGroup` if you specify the
    #     `name` parameter as `ResourceType`. There is no filter for EBS
    #     volumes because volume recommendations cannot be exported at this
    #     time.
    #
    #   * Specify `Queued`, `InProgress`, `Complete`, or `Failed` if you
    #     specify the `name` parameter as `JobStatus`.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/JobFilter AWS API Documentation
    #
    class JobFilter < Struct.new(
      :name,
      :values)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the effective recommendation preferences for Lambda
    # functions.
    #
    # @!attribute [rw] savings_estimation_mode
    #   Describes the savings estimation mode applied for calculating
    #   savings opportunity for Lambda functions.
    #   @return [Types::LambdaSavingsEstimationMode]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/LambdaEffectiveRecommendationPreferences AWS API Documentation
    #
    class LambdaEffectiveRecommendationPreferences < Struct.new(
      :savings_estimation_mode)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the estimated monthly savings possible for Lambda functions
    # by adopting Compute Optimizer recommendations. This is based on Lambda
    # functions pricing after applying Savings Plans discounts.
    #
    # @!attribute [rw] currency
    #   The currency of the estimated monthly savings.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the estimated monthly savings.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/LambdaEstimatedMonthlySavings AWS API Documentation
    #
    class LambdaEstimatedMonthlySavings < Struct.new(
      :currency,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a projected utilization metric of an Lambda function
    # recommendation option.
    #
    # @!attribute [rw] name
    #   The name of the projected utilization metric.
    #   @return [String]
    #
    # @!attribute [rw] statistic
    #   The statistic of the projected utilization metric.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The values of the projected utilization metrics.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/LambdaFunctionMemoryProjectedMetric AWS API Documentation
    #
    class LambdaFunctionMemoryProjectedMetric < Struct.new(
      :name,
      :statistic,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a recommendation option for an Lambda function.
    #
    # @!attribute [rw] rank
    #   The rank of the function recommendation option.
    #
    #   The top recommendation option is ranked as `1`.
    #   @return [Integer]
    #
    # @!attribute [rw] memory_size
    #   The memory size, in MB, of the function recommendation option.
    #   @return [Integer]
    #
    # @!attribute [rw] projected_utilization_metrics
    #   An array of objects that describe the projected utilization metrics
    #   of the function recommendation option.
    #   @return [Array<Types::LambdaFunctionMemoryProjectedMetric>]
    #
    # @!attribute [rw] savings_opportunity
    #   An object that describes the savings opportunity for the Lambda
    #   function recommendation option. Savings opportunity includes the
    #   estimated monthly savings amount and percentage.
    #   @return [Types::SavingsOpportunity]
    #
    # @!attribute [rw] savings_opportunity_after_discounts
    #   An object that describes the savings opportunity for the Lambda
    #   recommendation option which includes Saving Plans discounts. Savings
    #   opportunity includes the estimated monthly savings and percentage.
    #   @return [Types::LambdaSavingsOpportunityAfterDiscounts]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/LambdaFunctionMemoryRecommendationOption AWS API Documentation
    #
    class LambdaFunctionMemoryRecommendationOption < Struct.new(
      :rank,
      :memory_size,
      :projected_utilization_metrics,
      :savings_opportunity,
      :savings_opportunity_after_discounts)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an Lambda function recommendation.
    #
    # @!attribute [rw] function_arn
    #   The Amazon Resource Name (ARN) of the current function.
    #   @return [String]
    #
    # @!attribute [rw] function_version
    #   The version number of the current function.
    #   @return [String]
    #
    # @!attribute [rw] account_id
    #   The Amazon Web Services account ID of the function.
    #   @return [String]
    #
    # @!attribute [rw] current_memory_size
    #   The amount of memory, in MB, that's allocated to the current
    #   function.
    #   @return [Integer]
    #
    # @!attribute [rw] number_of_invocations
    #   The number of times your function code was applied during the
    #   look-back period.
    #   @return [Integer]
    #
    # @!attribute [rw] utilization_metrics
    #   An array of objects that describe the utilization metrics of the
    #   function.
    #   @return [Array<Types::LambdaFunctionUtilizationMetric>]
    #
    # @!attribute [rw] lookback_period_in_days
    #   The number of days for which utilization metrics were analyzed for
    #   the function.
    #   @return [Float]
    #
    # @!attribute [rw] last_refresh_timestamp
    #   The timestamp of when the function recommendation was last
    #   generated.
    #   @return [Time]
    #
    # @!attribute [rw] finding
    #   The finding classification of the function.
    #
    #   Findings for functions include:
    #
    #   * <b> <code>Optimized</code> </b> — The function is correctly
    #     provisioned to run your workload based on its current
    #     configuration and its utilization history. This finding
    #     classification does not include finding reason codes.
    #
    #   * <b> <code>NotOptimized</code> </b> — The function is performing at
    #     a higher level (over-provisioned) or at a lower level
    #     (under-provisioned) than required for your workload because its
    #     current configuration is not optimal. Over-provisioned resources
    #     might lead to unnecessary infrastructure cost, and
    #     under-provisioned resources might lead to poor application
    #     performance. This finding classification can include the
    #     `MemoryUnderprovisioned` and `MemoryUnderprovisioned` finding
    #     reason codes.
    #
    #   * <b> <code>Unavailable</code> </b> — Compute Optimizer was unable
    #     to generate a recommendation for the function. This could be
    #     because the function has not accumulated sufficient metric data,
    #     or the function does not qualify for a recommendation. This
    #     finding classification can include the `InsufficientData` and
    #     `Inconclusive` finding reason codes.
    #
    #     <note markdown="1"> Functions with a finding of unavailable are not returned unless
    #     you specify the `filter` parameter with a value of `Unavailable`
    #     in your `GetLambdaFunctionRecommendations` request.
    #
    #      </note>
    #   @return [String]
    #
    # @!attribute [rw] finding_reason_codes
    #   The reason for the finding classification of the function.
    #
    #   <note markdown="1"> Functions that have a finding classification of `Optimized` don't
    #   have a finding reason code.
    #
    #    </note>
    #
    #   Finding reason codes for functions include:
    #
    #   * <b> <code>MemoryOverprovisioned</code> </b> — The function is
    #     over-provisioned when its memory configuration can be sized down
    #     while still meeting the performance requirements of your workload.
    #     An over-provisioned function might lead to unnecessary
    #     infrastructure cost. This finding reason code is part of the
    #     `NotOptimized` finding classification.
    #
    #   * <b> <code>MemoryUnderprovisioned</code> </b> — The function is
    #     under-provisioned when its memory configuration doesn't meet the
    #     performance requirements of the workload. An under-provisioned
    #     function might lead to poor application performance. This finding
    #     reason code is part of the `NotOptimized` finding classification.
    #
    #   * <b> <code>InsufficientData</code> </b> — The function does not
    #     have sufficient metric data for Compute Optimizer to generate a
    #     recommendation. For more information, see the [Supported resources
    #     and requirements][1] in the *Compute Optimizer User Guide*. This
    #     finding reason code is part of the `Unavailable` finding
    #     classification.
    #
    #   * <b> <code>Inconclusive</code> </b> — The function does not qualify
    #     for a recommendation because Compute Optimizer cannot generate a
    #     recommendation with a high degree of confidence. This finding
    #     reason code is part of the `Unavailable` finding classification.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/requirements.html
    #   @return [Array<String>]
    #
    # @!attribute [rw] memory_size_recommendation_options
    #   An array of objects that describe the memory configuration
    #   recommendation options for the function.
    #   @return [Array<Types::LambdaFunctionMemoryRecommendationOption>]
    #
    # @!attribute [rw] current_performance_risk
    #   The risk of the current Lambda function not meeting the performance
    #   needs of its workloads. The higher the risk, the more likely the
    #   current Lambda function requires more memory.
    #   @return [String]
    #
    # @!attribute [rw] effective_recommendation_preferences
    #   Describes the effective recommendation preferences for Lambda
    #   functions.
    #   @return [Types::LambdaEffectiveRecommendationPreferences]
    #
    # @!attribute [rw] tags
    #   A list of tags assigned to your Lambda function recommendations.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/LambdaFunctionRecommendation AWS API Documentation
    #
    class LambdaFunctionRecommendation < Struct.new(
      :function_arn,
      :function_version,
      :account_id,
      :current_memory_size,
      :number_of_invocations,
      :utilization_metrics,
      :lookback_period_in_days,
      :last_refresh_timestamp,
      :finding,
      :finding_reason_codes,
      :memory_size_recommendation_options,
      :current_performance_risk,
      :effective_recommendation_preferences,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a filter that returns a more specific list of Lambda
    # function recommendations. Use this filter with the
    # GetLambdaFunctionRecommendations action.
    #
    # You can use `EBSFilter` with the GetEBSVolumeRecommendations action,
    # `JobFilter` with the DescribeRecommendationExportJobs action, and
    # `Filter` with the GetAutoScalingGroupRecommendations and
    # GetEC2InstanceRecommendations actions.
    #
    # @!attribute [rw] name
    #   The name of the filter.
    #
    #   Specify `Finding` to return recommendations with a specific finding
    #   classification (for example, `NotOptimized`).
    #
    #   Specify `FindingReasonCode` to return recommendations with a
    #   specific finding reason code (for example,
    #   `MemoryUnderprovisioned`).
    #
    #   You can filter your Lambda function recommendations by `tag:key` and
    #   `tag-key` tags.
    #
    #   A `tag:key` is a key and value combination of a tag assigned to your
    #   Lambda function recommendations. Use the tag key in the filter name
    #   and the tag value as the filter value. For example, to find all
    #   Lambda function recommendations that have a tag with the key of
    #   `Owner` and the value of `TeamA`, specify `tag:Owner` for the filter
    #   name and `TeamA` for the filter value.
    #
    #   A `tag-key` is the key of a tag assigned to your Lambda function
    #   recommendations. Use this filter to find all of your Lambda function
    #   recommendations that have a tag with a specific key. This doesn’t
    #   consider the tag value. For example, you can find your Lambda
    #   function recommendations with a tag key value of `Owner` or without
    #   any tag keys assigned.
    #   @return [String]
    #
    # @!attribute [rw] values
    #   The value of the filter.
    #
    #   The valid values for this parameter are as follows, depending on
    #   what you specify for the `name` parameter:
    #
    #   * Specify `Optimized`, `NotOptimized`, or `Unavailable` if you
    #     specify the `name` parameter as `Finding`.
    #
    #   * Specify `MemoryOverprovisioned`, `MemoryUnderprovisioned`,
    #     `InsufficientData`, or `Inconclusive` if you specify the `name`
    #     parameter as `FindingReasonCode`.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/LambdaFunctionRecommendationFilter AWS API Documentation
    #
    class LambdaFunctionRecommendationFilter < Struct.new(
      :name,
      :values)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a utilization metric of an Lambda function.
    #
    # @!attribute [rw] name
    #   The name of the utilization metric.
    #
    #   The following utilization metrics are available:
    #
    #   * `Duration` - The amount of time that your function code spends
    #     processing an event.
    #
    #   * `Memory` - The amount of memory used per invocation.
    #   @return [String]
    #
    # @!attribute [rw] statistic
    #   The statistic of the utilization metric.
    #
    #   The Compute Optimizer API, Command Line Interface (CLI), and SDKs
    #   return utilization metrics using only the `Maximum` statistic, which
    #   is the highest value observed during the specified period.
    #
    #   The Compute Optimizer console displays graphs for some utilization
    #   metrics using the `Average` statistic, which is the value of `Sum` /
    #   `SampleCount` during the specified period. For more information, see
    #   [Viewing resource recommendations][1] in the *Compute Optimizer User
    #   Guide*. You can also get averaged utilization metric data for your
    #   resources using Amazon CloudWatch. For more information, see the
    #   [Amazon CloudWatch User Guide][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/viewing-recommendations.html
    #   [2]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the utilization metric.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/LambdaFunctionUtilizationMetric AWS API Documentation
    #
    class LambdaFunctionUtilizationMetric < Struct.new(
      :name,
      :statistic,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the savings estimation used for calculating savings
    # opportunity for Lambda functions.
    #
    # @!attribute [rw] source
    #   Describes the source for calculation of savings opportunity for
    #   Lambda functions.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/LambdaSavingsEstimationMode AWS API Documentation
    #
    class LambdaSavingsEstimationMode < Struct.new(
      :source)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the savings opportunity for Lambda functions recommendations
    # after applying Savings Plans discounts.
    #
    # Savings opportunity represents the estimated monthly savings after
    # applying Savings Plans discounts. You can achieve this by implementing
    # a given Compute Optimizer recommendation.
    #
    # @!attribute [rw] savings_opportunity_percentage
    #   The estimated monthly savings possible as a percentage of monthly
    #   cost by adopting Compute Optimizer’s Lambda function
    #   recommendations. This includes any applicable Savings Plans
    #   discounts.
    #   @return [Float]
    #
    # @!attribute [rw] estimated_monthly_savings
    #   The estimated monthly savings possible by adopting Compute
    #   Optimizer’s Lambda function recommendations. This includes any
    #   applicable Savings Plans discounts.
    #   @return [Types::LambdaEstimatedMonthlySavings]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/LambdaSavingsOpportunityAfterDiscounts AWS API Documentation
    #
    class LambdaSavingsOpportunityAfterDiscounts < Struct.new(
      :savings_opportunity_percentage,
      :estimated_monthly_savings)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the configuration of a license for an Amazon EC2 instance.
    #
    # @!attribute [rw] number_of_cores
    #   The current number of cores associated with the instance.
    #   @return [Integer]
    #
    # @!attribute [rw] instance_type
    #   The instance type used in the license.
    #   @return [String]
    #
    # @!attribute [rw] operating_system
    #   The operating system of the instance.
    #   @return [String]
    #
    # @!attribute [rw] license_edition
    #   The edition of the license for the application that runs on the
    #   instance.
    #   @return [String]
    #
    # @!attribute [rw] license_name
    #   The name of the license for the application that runs on the
    #   instance.
    #   @return [String]
    #
    # @!attribute [rw] license_model
    #   The license type associated with the instance.
    #   @return [String]
    #
    # @!attribute [rw] license_version
    #   The version of the license for the application that runs on the
    #   instance.
    #   @return [String]
    #
    # @!attribute [rw] metrics_source
    #   The list of metric sources required to generate recommendations for
    #   commercial software licenses.
    #   @return [Array<Types::MetricSource>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/LicenseConfiguration AWS API Documentation
    #
    class LicenseConfiguration < Struct.new(
      :number_of_cores,
      :instance_type,
      :operating_system,
      :license_edition,
      :license_name,
      :license_model,
      :license_version,
      :metrics_source)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a license recommendation for an EC2 instance.
    #
    # @!attribute [rw] resource_arn
    #   The ARN that identifies the Amazon EC2 instance.
    #   @return [String]
    #
    # @!attribute [rw] account_id
    #   The Amazon Web Services account ID of the license.
    #   @return [String]
    #
    # @!attribute [rw] current_license_configuration
    #   An object that describes the current configuration of an instance
    #   that runs on a license.
    #   @return [Types::LicenseConfiguration]
    #
    # @!attribute [rw] lookback_period_in_days
    #   The number of days for which utilization metrics were analyzed for
    #   an instance that runs on a license.
    #   @return [Float]
    #
    # @!attribute [rw] last_refresh_timestamp
    #   The timestamp of when the license recommendation was last generated.
    #   @return [Time]
    #
    # @!attribute [rw] finding
    #   The finding classification for an instance that runs on a license.
    #
    #   Findings include:
    #
    #   * `InsufficentMetrics` — When Compute Optimizer detects that your
    #     CloudWatch Application Insights isn't enabled or is enabled with
    #     insufficient permissions.
    #
    #   * `NotOptimized` — When Compute Optimizer detects that your EC2
    #     infrastructure isn't using any of the SQL server license features
    #     you're paying for, a license is considered not optimized.
    #
    #   * `Optimized` — When Compute Optimizer detects that all
    #     specifications of your license meet the performance requirements
    #     of your workload.
    #   @return [String]
    #
    # @!attribute [rw] finding_reason_codes
    #   The reason for the finding classification for an instance that runs
    #   on a license.
    #
    #   Finding reason codes include:
    #
    #   * `Optimized` — All specifications of your license meet the
    #     performance requirements of your workload.
    #
    #   * `LicenseOverprovisioned` — A license is considered
    #     over-provisioned when your license can be downgraded while still
    #     meeting the performance requirements of your workload.
    #
    #   * `InvalidCloudwatchApplicationInsights` — CloudWatch Application
    #     Insights isn't configured properly.
    #
    #   * `CloudwatchApplicationInsightsError` — There is a CloudWatch
    #     Application Insights error.
    #   @return [Array<String>]
    #
    # @!attribute [rw] license_recommendation_options
    #   An array of objects that describe the license recommendation
    #   options.
    #   @return [Array<Types::LicenseRecommendationOption>]
    #
    # @!attribute [rw] tags
    #   A list of tags assigned to an EC2 instance.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/LicenseRecommendation AWS API Documentation
    #
    class LicenseRecommendation < Struct.new(
      :resource_arn,
      :account_id,
      :current_license_configuration,
      :lookback_period_in_days,
      :last_refresh_timestamp,
      :finding,
      :finding_reason_codes,
      :license_recommendation_options,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a filter that returns a more specific list of license
    # recommendations. Use this filter with the `GetLicenseRecommendation`
    # action.
    #
    # @!attribute [rw] name
    #   The name of the filter.
    #
    #   Specify `Finding` to return recommendations with a specific finding
    #   classification.
    #
    #   Specify `FindingReasonCode` to return recommendations with a
    #   specific finding reason code.
    #
    #   You can filter your license recommendations by `tag:key` and
    #   `tag-key` tags.
    #
    #   A `tag:key` is a key and value combination of a tag assigned to your
    #   license recommendations. Use the tag key in the filter name and the
    #   tag value as the filter value. For example, to find all license
    #   recommendations that have a tag with the key of `Owner` and the
    #   value of `TeamA`, specify `tag:Owner` for the filter name and
    #   `TeamA` for the filter value.
    #
    #   A `tag-key` is the key of a tag assigned to your license
    #   recommendations. Use this filter to find all of your license
    #   recommendations that have a tag with a specific key. This doesn’t
    #   consider the tag value. For example, you can find your license
    #   recommendations with a tag key value of `Owner` or without any tag
    #   keys assigned.
    #   @return [String]
    #
    # @!attribute [rw] values
    #   The value of the filter.
    #
    #   The valid values for this parameter are as follows, depending on
    #   what you specify for the `name` parameter:
    #
    #   * If you specify the `name` parameter as `Finding`, then specify
    #     `Optimized`, `NotOptimized`, or `InsufficentMetrics`.
    #
    #   * If you specify the `name` parameter as `FindingReasonCode`, then
    #     specify `Optimized`, `LicenseOverprovisioned`,
    #     `InvalidCloudwatchApplicationInsights`, or
    #     `CloudwatchApplicationInsightsError`.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/LicenseRecommendationFilter AWS API Documentation
    #
    class LicenseRecommendationFilter < Struct.new(
      :name,
      :values)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the recommendation options for licenses.
    #
    # @!attribute [rw] rank
    #   The rank of the license recommendation option.
    #
    #   The top recommendation option is ranked as `1`.
    #   @return [Integer]
    #
    # @!attribute [rw] operating_system
    #   The operating system of a license recommendation option.
    #   @return [String]
    #
    # @!attribute [rw] license_edition
    #   The recommended edition of the license for the application that runs
    #   on the instance.
    #   @return [String]
    #
    # @!attribute [rw] license_model
    #   The recommended license type associated with the instance.
    #   @return [String]
    #
    # @!attribute [rw] savings_opportunity
    #   Describes the savings opportunity for recommendations of a given
    #   resource type or for the recommendation option of an individual
    #   resource.
    #
    #   Savings opportunity represents the estimated monthly savings you can
    #   achieve by implementing a given Compute Optimizer recommendation.
    #
    #   Savings opportunity data requires that you opt in to Cost Explorer,
    #   as well as activate **Receive Amazon EC2 resource recommendations**
    #   in the Cost Explorer preferences page. That creates a connection
    #   between Cost Explorer and Compute Optimizer. With this connection,
    #   Cost Explorer generates savings estimates considering the price of
    #   existing resources, the price of recommended resources, and
    #   historical usage data. Estimated monthly savings reflects the
    #   projected dollar savings associated with each of the recommendations
    #   generated. For more information, see [Enabling Cost Explorer][1] and
    #   [Optimizing your cost with Rightsizing Recommendations][2] in the
    #   *Cost Management User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/cost-management/latest/userguide/ce-enable.html
    #   [2]: https://docs.aws.amazon.com/cost-management/latest/userguide/ce-rightsizing.html
    #   @return [Types::SavingsOpportunity]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/LicenseRecommendationOption AWS API Documentation
    #
    class LicenseRecommendationOption < Struct.new(
      :rank,
      :operating_system,
      :license_edition,
      :license_model,
      :savings_opportunity)
      SENSITIVE = []
      include Aws::Structure
    end

    # The request exceeds a limit of the service.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/LimitExceededException AWS API Documentation
    #
    class LimitExceededException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The memory size configurations of a container.
    #
    # @!attribute [rw] memory
    #   The amount of memory in the container.
    #   @return [Integer]
    #
    # @!attribute [rw] memory_reservation
    #   The limit of memory reserve for the container.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/MemorySizeConfiguration AWS API Documentation
    #
    class MemorySizeConfiguration < Struct.new(
      :memory,
      :memory_reservation)
      SENSITIVE = []
      include Aws::Structure
    end

    # The list of metric sources required to generate recommendations for
    # commercial software licenses.
    #
    # @!attribute [rw] provider
    #   The name of the metric source provider.
    #   @return [String]
    #
    # @!attribute [rw] provider_arn
    #   The ARN of the metric source provider.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/MetricSource AWS API Documentation
    #
    class MetricSource < Struct.new(
      :provider,
      :provider_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # The request must contain either a valid (registered) Amazon Web
    # Services access key ID or X.509 certificate.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/MissingAuthenticationToken AWS API Documentation
    #
    class MissingAuthenticationToken < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The account is not opted in to Compute Optimizer.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/OptInRequiredException AWS API Documentation
    #
    class OptInRequiredException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The preference to control which resource type values are considered
    # when generating rightsizing recommendations. You can specify this
    # preference as a combination of include and exclude lists. You must
    # specify either an `includeList` or `excludeList`. If the preference is
    # an empty set of resource type values, an error occurs. For more
    # information, see [ Rightsizing recommendation preferences][1] in the
    # *Compute Optimizer User Guide*.
    #
    # <note markdown="1"> * This preference is only available for the Amazon EC2 instance and
    #   Auto Scaling group resource types.
    #
    # * Compute Optimizer only supports the customization of
    #   `Ec2InstanceTypes`.
    #
    #  </note>
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/rightsizing-preferences.html
    #
    # @!attribute [rw] name
    #   The type of preferred resource to customize.
    #
    #   <note markdown="1"> Compute Optimizer only supports the customization of
    #   `Ec2InstanceTypes`.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] include_list
    #   The preferred resource type values to include in the recommendation
    #   candidates. You can specify the exact resource type value, such as
    #   m5.large, or use wild card expressions, such as m5. If this isn’t
    #   specified, all supported resources are included by default. You can
    #   specify up to 1000 values in this list.
    #   @return [Array<String>]
    #
    # @!attribute [rw] exclude_list
    #   The preferred resource type values to exclude from the
    #   recommendation candidates. If this isn’t specified, all supported
    #   resources are included by default. You can specify up to 1000 values
    #   in this list.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/PreferredResource AWS API Documentation
    #
    class PreferredResource < Struct.new(
      :name,
      :include_list,
      :exclude_list)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a projected utilization metric of a recommendation option,
    # such as an Amazon EC2 instance. This represents the projected
    # utilization of a recommendation option had you used that resource
    # during the analyzed period.
    #
    # Compare the utilization metric data of your resource against its
    # projected utilization metric data to determine the performance
    # difference between your current resource and the recommended option.
    #
    # <note markdown="1"> The `Cpu`, `Memory`, `GPU`, and `GPU_MEMORY` metrics are the only
    # projected utilization metrics returned when you run the
    # GetEC2RecommendationProjectedMetrics action. Additionally, these
    # metrics are only returned for resources with the unified CloudWatch
    # agent installed on them. For more information, see [Enabling Memory
    # Utilization with the CloudWatch Agent][1] and [Enabling NVIDIA GPU
    # utilization with the CloudWatch Agent][2].
    #
    #  </note>
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent
    # [2]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#nvidia-cw-agent
    #
    # @!attribute [rw] name
    #   The name of the projected utilization metric.
    #
    #   The following projected utilization metrics are returned:
    #
    #   * `Cpu` - The projected percentage of allocated EC2 compute units
    #     that would be in use on the recommendation option had you used
    #     that resource during the analyzed period. This metric identifies
    #     the processing power required to run an application on the
    #     recommendation option.
    #
    #     Depending on the instance type, tools in your operating system can
    #     show a lower percentage than CloudWatch when the instance is not
    #     allocated a full processor core.
    #
    #   * `Memory` - The percentage of memory that would be in use on the
    #     recommendation option had you used that resource during the
    #     analyzed period. This metric identifies the amount of memory
    #     required to run an application on the recommendation option.
    #
    #     Units: Percent
    #
    #     <note markdown="1"> The `Memory` metric is only returned for resources with the
    #     unified CloudWatch agent installed on them. For more information,
    #     see [Enabling Memory Utilization with the CloudWatch Agent][1].
    #
    #      </note>
    #
    #   * `GPU` - The projected percentage of allocated GPUs if you adjust
    #     your configurations to Compute Optimizer's recommendation option.
    #
    #   * `GPU_MEMORY` - The projected percentage of total GPU memory if you
    #     adjust your configurations to Compute Optimizer's recommendation
    #     option.
    #
    #     <note markdown="1"> The `GPU` and `GPU_MEMORY` metrics are only returned for resources
    #     with the unified CloudWatch Agent installed on them. For more
    #     information, see [Enabling NVIDIA GPU utilization with the
    #     CloudWatch Agent][2].
    #
    #      </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent
    #   [2]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#nvidia-cw-agent
    #   @return [String]
    #
    # @!attribute [rw] timestamps
    #   The timestamps of the projected utilization metric.
    #   @return [Array<Time>]
    #
    # @!attribute [rw] values
    #   The values of the projected utilization metrics.
    #   @return [Array<Float>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ProjectedMetric AWS API Documentation
    #
    class ProjectedMetric < Struct.new(
      :name,
      :timestamps,
      :values)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] resource_type
    #   The target resource type of the recommendation preference to create.
    #
    #   The `Ec2Instance` option encompasses standalone instances and
    #   instances that are part of Auto Scaling groups. The
    #   `AutoScalingGroup` option encompasses only instances that are part
    #   of an Auto Scaling group.
    #   @return [String]
    #
    # @!attribute [rw] scope
    #   An object that describes the scope of the recommendation preference
    #   to create.
    #
    #   You can create recommendation preferences at the organization level
    #   (for management accounts of an organization only), account level,
    #   and resource level. For more information, see [Activating enhanced
    #   infrastructure metrics][1] in the *Compute Optimizer User Guide*.
    #
    #   <note markdown="1"> You cannot create recommendation preferences for Auto Scaling groups
    #   at the organization and account levels. You can create
    #   recommendation preferences for Auto Scaling groups only at the
    #   resource level by specifying a scope name of `ResourceArn` and a
    #   scope value of the Auto Scaling group Amazon Resource Name (ARN).
    #   This will configure the preference for all instances that are part
    #   of the specified Auto Scaling group. You also cannot create
    #   recommendation preferences at the resource level for instances that
    #   are part of an Auto Scaling group. You can create recommendation
    #   preferences at the resource level only for standalone instances.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html
    #   @return [Types::Scope]
    #
    # @!attribute [rw] enhanced_infrastructure_metrics
    #   The status of the enhanced infrastructure metrics recommendation
    #   preference to create or update.
    #
    #   Specify the `Active` status to activate the preference, or specify
    #   `Inactive` to deactivate the preference.
    #
    #   For more information, see [Enhanced infrastructure metrics][1] in
    #   the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html
    #   @return [String]
    #
    # @!attribute [rw] inferred_workload_types
    #   The status of the inferred workload types recommendation preference
    #   to create or update.
    #
    #   <note markdown="1"> The inferred workload type feature is active by default. To
    #   deactivate it, create a recommendation preference.
    #
    #    </note>
    #
    #   Specify the `Inactive` status to deactivate the feature, or specify
    #   `Active` to activate it.
    #
    #   For more information, see [Inferred workload types][1] in the
    #   *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/inferred-workload-types.html
    #   @return [String]
    #
    # @!attribute [rw] external_metrics_preference
    #   The provider of the external metrics recommendation preference to
    #   create or update.
    #
    #   Specify a valid provider in the `source` field to activate the
    #   preference. To delete this preference, see the
    #   DeleteRecommendationPreferences action.
    #
    #   This preference can only be set for the `Ec2Instance` resource type.
    #
    #   For more information, see [External metrics ingestion][1] in the
    #   *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/external-metrics-ingestion.html
    #   @return [Types::ExternalMetricsPreference]
    #
    # @!attribute [rw] look_back_period
    #   The preference to control the number of days the utilization metrics
    #   of the Amazon Web Services resource are analyzed. When this
    #   preference isn't specified, we use the default value `DAYS_14`.
    #
    #   You can only set this preference for the Amazon EC2 instance and
    #   Auto Scaling group resource types.
    #
    #   <note markdown="1"> * Amazon EC2 instance lookback preferences can be set at the
    #     organization, account, and resource levels.
    #
    #   * Auto Scaling group lookback preferences can only be set at the
    #     resource level.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] utilization_preferences
    #   The preference to control the resource’s CPU utilization threshold,
    #   CPU utilization headroom, and memory utilization headroom. When this
    #   preference isn't specified, we use the following default values.
    #
    #   CPU utilization:
    #
    #   * `P99_5` for threshold
    #
    #   * `PERCENT_20` for headroom
    #
    #   Memory utilization:
    #
    #   * `PERCENT_20` for headroom
    #
    #   ^
    #
    #   <note markdown="1"> * You can only set CPU and memory utilization preferences for the
    #     Amazon EC2 instance resource type.
    #
    #   * The threshold setting isn’t available for memory utilization.
    #
    #    </note>
    #   @return [Array<Types::UtilizationPreference>]
    #
    # @!attribute [rw] preferred_resources
    #   The preference to control which resource type values are considered
    #   when generating rightsizing recommendations. You can specify this
    #   preference as a combination of include and exclude lists. You must
    #   specify either an `includeList` or `excludeList`. If the preference
    #   is an empty set of resource type values, an error occurs.
    #
    #   <note markdown="1"> You can only set this preference for the Amazon EC2 instance and
    #   Auto Scaling group resource types.
    #
    #    </note>
    #   @return [Array<Types::PreferredResource>]
    #
    # @!attribute [rw] savings_estimation_mode
    #   The status of the savings estimation mode preference to create or
    #   update.
    #
    #   Specify the `AfterDiscounts` status to activate the preference, or
    #   specify `BeforeDiscounts` to deactivate the preference.
    #
    #   Only the account manager or delegated administrator of your
    #   organization can activate this preference.
    #
    #   For more information, see [ Savings estimation mode][1] in the
    #   *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/savings-estimation-mode.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/PutRecommendationPreferencesRequest AWS API Documentation
    #
    class PutRecommendationPreferencesRequest < Struct.new(
      :resource_type,
      :scope,
      :enhanced_infrastructure_metrics,
      :inferred_workload_types,
      :external_metrics_preference,
      :look_back_period,
      :utilization_preferences,
      :preferred_resources,
      :savings_estimation_mode)
      SENSITIVE = []
      include Aws::Structure
    end

    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/PutRecommendationPreferencesResponse AWS API Documentation
    #
    class PutRecommendationPreferencesResponse < Aws::EmptyStructure; end

    # Describes the recommendation options for an Amazon RDS instance.
    #
    # @!attribute [rw] db_instance_class
    #   Describes the DB instance class recommendation option for your
    #   Amazon RDS instance.
    #   @return [String]
    #
    # @!attribute [rw] projected_utilization_metrics
    #   An array of objects that describe the projected utilization metrics
    #   of the RDS instance recommendation option.
    #   @return [Array<Types::RDSDBUtilizationMetric>]
    #
    # @!attribute [rw] performance_risk
    #   The performance risk of the RDS instance recommendation option.
    #   @return [Float]
    #
    # @!attribute [rw] rank
    #   The rank identifier of the RDS instance recommendation option.
    #   @return [Integer]
    #
    # @!attribute [rw] savings_opportunity
    #   Describes the savings opportunity for recommendations of a given
    #   resource type or for the recommendation option of an individual
    #   resource.
    #
    #   Savings opportunity represents the estimated monthly savings you can
    #   achieve by implementing a given Compute Optimizer recommendation.
    #
    #   Savings opportunity data requires that you opt in to Cost Explorer,
    #   as well as activate **Receive Amazon EC2 resource recommendations**
    #   in the Cost Explorer preferences page. That creates a connection
    #   between Cost Explorer and Compute Optimizer. With this connection,
    #   Cost Explorer generates savings estimates considering the price of
    #   existing resources, the price of recommended resources, and
    #   historical usage data. Estimated monthly savings reflects the
    #   projected dollar savings associated with each of the recommendations
    #   generated. For more information, see [Enabling Cost Explorer][1] and
    #   [Optimizing your cost with Rightsizing Recommendations][2] in the
    #   *Cost Management User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/cost-management/latest/userguide/ce-enable.html
    #   [2]: https://docs.aws.amazon.com/cost-management/latest/userguide/ce-rightsizing.html
    #   @return [Types::SavingsOpportunity]
    #
    # @!attribute [rw] savings_opportunity_after_discounts
    #   Describes the savings opportunity for Amazon RDS recommendations or
    #   for the recommendation option.
    #
    #   Savings opportunity represents the estimated monthly savings after
    #   applying Savings Plans discounts. You can achieve this by
    #   implementing a given Compute Optimizer recommendation.
    #   @return [Types::RDSInstanceSavingsOpportunityAfterDiscounts]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RDSDBInstanceRecommendationOption AWS API Documentation
    #
    class RDSDBInstanceRecommendationOption < Struct.new(
      :db_instance_class,
      :projected_utilization_metrics,
      :performance_risk,
      :rank,
      :savings_opportunity,
      :savings_opportunity_after_discounts)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an Amazon RDS recommendation.
    #
    # @!attribute [rw] resource_arn
    #   The ARN of the current Amazon RDS.
    #
    #   The following is the format of the ARN:
    #
    #   `arn:aws:rds:{region}:{accountId}:db:{resourceName}`
    #   @return [String]
    #
    # @!attribute [rw] account_id
    #   The Amazon Web Services account ID of the Amazon RDS.
    #   @return [String]
    #
    # @!attribute [rw] engine
    #   The engine of the RDS instance.
    #   @return [String]
    #
    # @!attribute [rw] engine_version
    #   The database engine version.
    #   @return [String]
    #
    # @!attribute [rw] current_db_instance_class
    #   The DB instance class of the current RDS instance.
    #   @return [String]
    #
    # @!attribute [rw] current_storage_configuration
    #   The configuration of the current RDS storage.
    #   @return [Types::DBStorageConfiguration]
    #
    # @!attribute [rw] idle
    #   This indicates if the RDS instance is idle or not.
    #   @return [String]
    #
    # @!attribute [rw] instance_finding
    #   The finding classification of an Amazon RDS instance.
    #
    #   Findings for Amazon RDS instance include:
    #
    #   * <b> <code>Underprovisioned</code> </b> — When Compute Optimizer
    #     detects that there’s not enough resource specifications, an Amazon
    #     RDS is considered under-provisioned.
    #
    #   * <b> <code>Overprovisioned</code> </b> — When Compute Optimizer
    #     detects that there’s excessive resource specifications, an Amazon
    #     RDS is considered over-provisioned.
    #
    #   * <b> <code>Optimized</code> </b> — When the specifications of your
    #     Amazon RDS instance meet the performance requirements of your
    #     workload, the service is considered optimized.
    #   @return [String]
    #
    # @!attribute [rw] storage_finding
    #   The finding classification of Amazon RDS storage.
    #
    #   Findings for Amazon RDS instance include:
    #
    #   * <b> <code>Underprovisioned</code> </b> — When Compute Optimizer
    #     detects that there’s not enough storage, an Amazon RDS is
    #     considered under-provisioned.
    #
    #   * <b> <code>Overprovisioned</code> </b> — When Compute Optimizer
    #     detects that there’s excessive storage, an Amazon RDS is
    #     considered over-provisioned.
    #
    #   * <b> <code>Optimized</code> </b> — When the storage of your Amazon
    #     RDS meet the performance requirements of your workload, the
    #     service is considered optimized.
    #   @return [String]
    #
    # @!attribute [rw] instance_finding_reason_codes
    #   The reason for the finding classification of an Amazon RDS instance.
    #   @return [Array<String>]
    #
    # @!attribute [rw] storage_finding_reason_codes
    #   The reason for the finding classification of Amazon RDS storage.
    #   @return [Array<String>]
    #
    # @!attribute [rw] instance_recommendation_options
    #   An array of objects that describe the recommendation options for the
    #   Amazon RDS instance.
    #   @return [Array<Types::RDSDBInstanceRecommendationOption>]
    #
    # @!attribute [rw] storage_recommendation_options
    #   An array of objects that describe the recommendation options for
    #   Amazon RDS storage.
    #   @return [Array<Types::RDSDBStorageRecommendationOption>]
    #
    # @!attribute [rw] utilization_metrics
    #   An array of objects that describe the utilization metrics of the
    #   Amazon RDS.
    #   @return [Array<Types::RDSDBUtilizationMetric>]
    #
    # @!attribute [rw] effective_recommendation_preferences
    #   Describes the effective recommendation preferences for Amazon RDS.
    #   @return [Types::RDSEffectiveRecommendationPreferences]
    #
    # @!attribute [rw] lookback_period_in_days
    #   The number of days the Amazon RDS utilization metrics were analyzed.
    #   @return [Float]
    #
    # @!attribute [rw] last_refresh_timestamp
    #   The timestamp of when the Amazon RDS recommendation was last
    #   generated.
    #   @return [Time]
    #
    # @!attribute [rw] tags
    #   A list of tags assigned to your Amazon RDS recommendations.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RDSDBRecommendation AWS API Documentation
    #
    class RDSDBRecommendation < Struct.new(
      :resource_arn,
      :account_id,
      :engine,
      :engine_version,
      :current_db_instance_class,
      :current_storage_configuration,
      :idle,
      :instance_finding,
      :storage_finding,
      :instance_finding_reason_codes,
      :storage_finding_reason_codes,
      :instance_recommendation_options,
      :storage_recommendation_options,
      :utilization_metrics,
      :effective_recommendation_preferences,
      :lookback_period_in_days,
      :last_refresh_timestamp,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a filter that returns a more specific list of Amazon RDS
    # recommendations. Use this filter with the GetECSServiceRecommendations
    # action.
    #
    # @!attribute [rw] name
    #   The name of the filter.
    #
    #   Specify `Finding` to return recommendations with a specific finding
    #   classification.
    #
    #   You can filter your Amazon RDS recommendations by `tag:key` and
    #   `tag-key` tags.
    #
    #   A `tag:key` is a key and value combination of a tag assigned to your
    #   Amazon RDS recommendations. Use the tag key in the filter name and
    #   the tag value as the filter value. For example, to find all Amazon
    #   RDS service recommendations that have a tag with the key of `Owner`
    #   and the value of `TeamA`, specify `tag:Owner` for the filter name
    #   and `TeamA` for the filter value.
    #
    #   A `tag-key` is the key of a tag assigned to your Amazon RDS
    #   recommendations. Use this filter to find all of your Amazon RDS
    #   recommendations that have a tag with a specific key. This doesn’t
    #   consider the tag value. For example, you can find your Amazon RDS
    #   service recommendations with a tag key value of `Owner` or without
    #   any tag keys assigned.
    #   @return [String]
    #
    # @!attribute [rw] values
    #   The value of the filter.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RDSDBRecommendationFilter AWS API Documentation
    #
    class RDSDBRecommendationFilter < Struct.new(
      :name,
      :values)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the recommendation options for Amazon RDS storage.
    #
    # @!attribute [rw] storage_configuration
    #   The recommended storage configuration.
    #   @return [Types::DBStorageConfiguration]
    #
    # @!attribute [rw] rank
    #   The rank identifier of the RDS storage recommendation option.
    #   @return [Integer]
    #
    # @!attribute [rw] savings_opportunity
    #   Describes the savings opportunity for recommendations of a given
    #   resource type or for the recommendation option of an individual
    #   resource.
    #
    #   Savings opportunity represents the estimated monthly savings you can
    #   achieve by implementing a given Compute Optimizer recommendation.
    #
    #   Savings opportunity data requires that you opt in to Cost Explorer,
    #   as well as activate **Receive Amazon EC2 resource recommendations**
    #   in the Cost Explorer preferences page. That creates a connection
    #   between Cost Explorer and Compute Optimizer. With this connection,
    #   Cost Explorer generates savings estimates considering the price of
    #   existing resources, the price of recommended resources, and
    #   historical usage data. Estimated monthly savings reflects the
    #   projected dollar savings associated with each of the recommendations
    #   generated. For more information, see [Enabling Cost Explorer][1] and
    #   [Optimizing your cost with Rightsizing Recommendations][2] in the
    #   *Cost Management User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/cost-management/latest/userguide/ce-enable.html
    #   [2]: https://docs.aws.amazon.com/cost-management/latest/userguide/ce-rightsizing.html
    #   @return [Types::SavingsOpportunity]
    #
    # @!attribute [rw] savings_opportunity_after_discounts
    #   Describes the savings opportunity for Amazon RDS storage
    #   recommendations or for the recommendation option.
    #
    #   Savings opportunity represents the estimated monthly savings after
    #   applying Savings Plans discounts. You can achieve this by
    #   implementing a given Compute Optimizer recommendation.
    #   @return [Types::RDSStorageSavingsOpportunityAfterDiscounts]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RDSDBStorageRecommendationOption AWS API Documentation
    #
    class RDSDBStorageRecommendationOption < Struct.new(
      :storage_configuration,
      :rank,
      :savings_opportunity,
      :savings_opportunity_after_discounts)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the utilization metric of an Amazon RDS.
    #
    # To determine the performance difference between your current Amazon
    # RDS and the recommended option, compare the utilization metric data of
    # your service against its projected utilization metric data.
    #
    # @!attribute [rw] name
    #   The name of the utilization metric.
    #   @return [String]
    #
    # @!attribute [rw] statistic
    #   The statistic of the utilization metric.
    #
    #   The Compute Optimizer API, Command Line Interface (CLI), and SDKs
    #   return utilization metrics using only the `Maximum` statistic, which
    #   is the highest value observed during the specified period.
    #
    #   The Compute Optimizer console displays graphs for some utilization
    #   metrics using the `Average` statistic, which is the value of `Sum` /
    #   `SampleCount` during the specified period. For more information, see
    #   [Viewing resource recommendations][1] in the *Compute Optimizer User
    #   Guide*. You can also get averaged utilization metric data for your
    #   resources using Amazon CloudWatch. For more information, see the
    #   [Amazon CloudWatch User Guide][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/viewing-recommendations.html
    #   [2]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the utilization metric.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RDSDBUtilizationMetric AWS API Documentation
    #
    class RDSDBUtilizationMetric < Struct.new(
      :name,
      :statistic,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the projected metrics of an Amazon RDS recommendation
    # option.
    #
    # To determine the performance difference between your current Amazon
    # RDS and the recommended option, compare the metric data of your
    # service against its projected metric data.
    #
    # @!attribute [rw] name
    #   The name of the projected metric.
    #   @return [String]
    #
    # @!attribute [rw] timestamps
    #   The timestamps of the projected metric.
    #   @return [Array<Time>]
    #
    # @!attribute [rw] values
    #   The values for the projected metric.
    #   @return [Array<Float>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RDSDatabaseProjectedMetric AWS API Documentation
    #
    class RDSDatabaseProjectedMetric < Struct.new(
      :name,
      :timestamps,
      :values)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the projected metrics of an Amazon RDS recommendation
    # option.
    #
    # To determine the performance difference between your current Amazon
    # RDS and the recommended option, compare the metric data of your
    # service against its projected metric data.
    #
    # @!attribute [rw] recommended_db_instance_class
    #   The recommended DB instance class for the Amazon RDS.
    #   @return [String]
    #
    # @!attribute [rw] rank
    #   The rank identifier of the RDS instance recommendation option.
    #   @return [Integer]
    #
    # @!attribute [rw] projected_metrics
    #   An array of objects that describe the projected metric.
    #   @return [Array<Types::RDSDatabaseProjectedMetric>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RDSDatabaseRecommendedOptionProjectedMetric AWS API Documentation
    #
    class RDSDatabaseRecommendedOptionProjectedMetric < Struct.new(
      :recommended_db_instance_class,
      :rank,
      :projected_metrics)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the effective recommendation preferences for Amazon RDS.
    #
    # @!attribute [rw] cpu_vendor_architectures
    #   Describes the CPU vendor and architecture for Amazon RDS
    #   recommendations.
    #   @return [Array<String>]
    #
    # @!attribute [rw] enhanced_infrastructure_metrics
    #   Describes the activation status of the enhanced infrastructure
    #   metrics preference.
    #
    #   A status of `Active` confirms that the preference is applied in the
    #   latest recommendation refresh, and a status of `Inactive` confirms
    #   that it's not yet applied to recommendations.
    #
    #   For more information, see [Enhanced infrastructure metrics][1] in
    #   the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html
    #   @return [String]
    #
    # @!attribute [rw] look_back_period
    #   The number of days the utilization metrics of the Amazon RDS are
    #   analyzed.
    #   @return [String]
    #
    # @!attribute [rw] savings_estimation_mode
    #   Describes the savings estimation mode preference applied for
    #   calculating savings opportunity for Amazon RDS.
    #   @return [Types::RDSSavingsEstimationMode]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RDSEffectiveRecommendationPreferences AWS API Documentation
    #
    class RDSEffectiveRecommendationPreferences < Struct.new(
      :cpu_vendor_architectures,
      :enhanced_infrastructure_metrics,
      :look_back_period,
      :savings_estimation_mode)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the estimated monthly savings possible for Amazon RDS
    # instances by adopting Compute Optimizer recommendations. This is based
    # on Amazon RDS pricing after applying Savings Plans discounts.
    #
    # @!attribute [rw] currency
    #   The currency of the estimated monthly savings.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the estimated monthly savings for Amazon RDS instances.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RDSInstanceEstimatedMonthlySavings AWS API Documentation
    #
    class RDSInstanceEstimatedMonthlySavings < Struct.new(
      :currency,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the savings opportunity for Amazon RDS instance
    # recommendations after applying Savings Plans discounts.
    #
    # Savings opportunity represents the estimated monthly savings after
    # applying Savings Plans discounts. You can achieve this by implementing
    # a given Compute Optimizer recommendation.
    #
    # @!attribute [rw] savings_opportunity_percentage
    #   The estimated monthly savings possible as a percentage of monthly
    #   cost by adopting Compute Optimizer’s Amazon RDS instance
    #   recommendations. This includes any applicable Savings Plans
    #   discounts.
    #   @return [Float]
    #
    # @!attribute [rw] estimated_monthly_savings
    #   The estimated monthly savings possible by adopting Compute
    #   Optimizer’s Amazon RDS instance recommendations. This includes any
    #   applicable Savings Plans discounts.
    #   @return [Types::RDSInstanceEstimatedMonthlySavings]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RDSInstanceSavingsOpportunityAfterDiscounts AWS API Documentation
    #
    class RDSInstanceSavingsOpportunityAfterDiscounts < Struct.new(
      :savings_opportunity_percentage,
      :estimated_monthly_savings)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the savings estimation mode used for calculating savings
    # opportunity for Amazon RDS.
    #
    # @!attribute [rw] source
    #   Describes the source for calculating the savings opportunity for
    #   Amazon RDS.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RDSSavingsEstimationMode AWS API Documentation
    #
    class RDSSavingsEstimationMode < Struct.new(
      :source)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the estimated monthly savings possible for Amazon RDS
    # storage by adopting Compute Optimizer recommendations. This is based
    # on Amazon RDS pricing after applying Savings Plans discounts.
    #
    # @!attribute [rw] currency
    #   The currency of the estimated monthly savings.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the estimated monthly savings for Amazon RDS storage.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RDSStorageEstimatedMonthlySavings AWS API Documentation
    #
    class RDSStorageEstimatedMonthlySavings < Struct.new(
      :currency,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the savings opportunity for Amazon RDS storage
    # recommendations after applying Savings Plans discounts.
    #
    # Savings opportunity represents the estimated monthly savings after
    # applying Savings Plans discounts. You can achieve this by implementing
    # a given Compute Optimizer recommendation.
    #
    # @!attribute [rw] savings_opportunity_percentage
    #   The estimated monthly savings possible as a percentage of monthly
    #   cost by adopting Compute Optimizer’s Amazon RDS storage
    #   recommendations. This includes any applicable Savings Plans
    #   discounts.
    #   @return [Float]
    #
    # @!attribute [rw] estimated_monthly_savings
    #   The estimated monthly savings possible by adopting Compute
    #   Optimizer’s Amazon RDS storage recommendations. This includes any
    #   applicable Savings Plans discounts.
    #   @return [Types::RDSStorageEstimatedMonthlySavings]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RDSStorageSavingsOpportunityAfterDiscounts AWS API Documentation
    #
    class RDSStorageSavingsOpportunityAfterDiscounts < Struct.new(
      :savings_opportunity_percentage,
      :estimated_monthly_savings)
      SENSITIVE = []
      include Aws::Structure
    end

    # A summary of a finding reason code.
    #
    # @!attribute [rw] name
    #   The name of the finding reason code.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the finding reason code summary.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ReasonCodeSummary AWS API Documentation
    #
    class ReasonCodeSummary < Struct.new(
      :name,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a recommendation export job.
    #
    # Use the DescribeRecommendationExportJobs action to view your
    # recommendation export jobs.
    #
    # Use the ExportAutoScalingGroupRecommendations or
    # ExportEC2InstanceRecommendations actions to request an export of your
    # recommendations.
    #
    # @!attribute [rw] job_id
    #   The identification number of the export job.
    #   @return [String]
    #
    # @!attribute [rw] destination
    #   An object that describes the destination of the export file.
    #   @return [Types::ExportDestination]
    #
    # @!attribute [rw] resource_type
    #   The resource type of the exported recommendations.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The status of the export job.
    #   @return [String]
    #
    # @!attribute [rw] creation_timestamp
    #   The timestamp of when the export job was created.
    #   @return [Time]
    #
    # @!attribute [rw] last_updated_timestamp
    #   The timestamp of when the export job was last updated.
    #   @return [Time]
    #
    # @!attribute [rw] failure_reason
    #   The reason for an export job failure.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RecommendationExportJob AWS API Documentation
    #
    class RecommendationExportJob < Struct.new(
      :job_id,
      :destination,
      :resource_type,
      :status,
      :creation_timestamp,
      :last_updated_timestamp,
      :failure_reason)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the recommendation preferences to return in the response of
    # a GetAutoScalingGroupRecommendations, GetEC2InstanceRecommendations,
    # GetEC2RecommendationProjectedMetrics, GetRDSDatabaseRecommendations,
    # and GetRDSDatabaseRecommendationProjectedMetrics request.
    #
    # @!attribute [rw] cpu_vendor_architectures
    #   Specifies the CPU vendor and architecture for Amazon EC2 instance
    #   and Auto Scaling group recommendations.
    #
    #   For example, when you specify `AWS_ARM64` with:
    #
    #   * A GetEC2InstanceRecommendations or
    #     GetAutoScalingGroupRecommendations request, Compute Optimizer
    #     returns recommendations that consist of Graviton instance types
    #     only.
    #
    #   * A GetEC2RecommendationProjectedMetrics request, Compute Optimizer
    #     returns projected utilization metrics for Graviton instance type
    #     recommendations only.
    #
    #   * A ExportEC2InstanceRecommendations or
    #     ExportAutoScalingGroupRecommendations request, Compute Optimizer
    #     exports recommendations that consist of Graviton instance types
    #     only.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RecommendationPreferences AWS API Documentation
    #
    class RecommendationPreferences < Struct.new(
      :cpu_vendor_architectures)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a recommendation preference.
    #
    # @!attribute [rw] scope
    #   An object that describes the scope of the recommendation preference.
    #
    #   Recommendation preferences can be created at the organization level
    #   (for management accounts of an organization only), account level,
    #   and resource level. For more information, see [Activating enhanced
    #   infrastructure metrics][1] in the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html
    #   @return [Types::Scope]
    #
    # @!attribute [rw] resource_type
    #   The target resource type of the recommendation preference to create.
    #
    #   The `Ec2Instance` option encompasses standalone instances and
    #   instances that are part of Auto Scaling groups. The
    #   `AutoScalingGroup` option encompasses only instances that are part
    #   of an Auto Scaling group.
    #   @return [String]
    #
    # @!attribute [rw] enhanced_infrastructure_metrics
    #   The status of the enhanced infrastructure metrics recommendation
    #   preference.
    #
    #   When the recommendations page is refreshed, a status of `Active`
    #   confirms that the preference is applied to the recommendations, and
    #   a status of `Inactive` confirms that the preference isn't yet
    #   applied to recommendations.
    #
    #   For more information, see [Enhanced infrastructure metrics][1] in
    #   the *Compute Optimizer User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html
    #   @return [String]
    #
    # @!attribute [rw] inferred_workload_types
    #   The status of the inferred workload types recommendation preference.
    #
    #   When the recommendations page is refreshed, a status of `Active`
    #   confirms that the preference is applied to the recommendations, and
    #   a status of `Inactive` confirms that the preference isn't yet
    #   applied to recommendations.
    #   @return [String]
    #
    # @!attribute [rw] external_metrics_preference
    #   An object that describes the external metrics recommendation
    #   preference.
    #
    #   If the preference is applied in the latest recommendation refresh,
    #   an object with a valid `source` value appears in the response. If
    #   the preference isn't applied to the recommendations already, then
    #   this object doesn't appear in the response.
    #   @return [Types::ExternalMetricsPreference]
    #
    # @!attribute [rw] look_back_period
    #   The preference to control the number of days the utilization metrics
    #   of the Amazon Web Services resource are analyzed. If the preference
    #   isn’t set, this object is null.
    #   @return [String]
    #
    # @!attribute [rw] utilization_preferences
    #   The preference to control the resource’s CPU utilization threshold,
    #   CPU utilization headroom, and memory utilization headroom. If the
    #   preference isn’t set, this object is null.
    #
    #   <note markdown="1"> This preference is only available for the Amazon EC2 instance
    #   resource type.
    #
    #    </note>
    #   @return [Array<Types::UtilizationPreference>]
    #
    # @!attribute [rw] preferred_resources
    #   The preference to control which resource type values are considered
    #   when generating rightsizing recommendations. This object resolves
    #   any wildcard expressions and returns the effective list of candidate
    #   resource type values. If the preference isn’t set, this object is
    #   null.
    #   @return [Array<Types::EffectivePreferredResource>]
    #
    # @!attribute [rw] savings_estimation_mode
    #   Describes the savings estimation mode used for calculating savings
    #   opportunity.
    #
    #   Only the account manager or delegated administrator of your
    #   organization can activate this preference.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RecommendationPreferencesDetail AWS API Documentation
    #
    class RecommendationPreferencesDetail < Struct.new(
      :scope,
      :resource_type,
      :enhanced_infrastructure_metrics,
      :inferred_workload_types,
      :external_metrics_preference,
      :look_back_period,
      :utilization_preferences,
      :preferred_resources,
      :savings_estimation_mode)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the source of a recommendation, such as an Amazon EC2
    # instance or Auto Scaling group.
    #
    # @!attribute [rw] recommendation_source_arn
    #   The Amazon Resource Name (ARN) of the recommendation source.
    #   @return [String]
    #
    # @!attribute [rw] recommendation_source_type
    #   The resource type of the recommendation source.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RecommendationSource AWS API Documentation
    #
    class RecommendationSource < Struct.new(
      :recommendation_source_arn,
      :recommendation_source_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # A summary of a recommendation.
    #
    # @!attribute [rw] summaries
    #   An array of objects that describe a recommendation summary.
    #   @return [Array<Types::Summary>]
    #
    # @!attribute [rw] recommendation_resource_type
    #   The resource type that the recommendation summary applies to.
    #   @return [String]
    #
    # @!attribute [rw] account_id
    #   The Amazon Web Services account ID of the recommendation summary.
    #   @return [String]
    #
    # @!attribute [rw] savings_opportunity
    #   An object that describes the savings opportunity for a given
    #   resource type. Savings opportunity includes the estimated monthly
    #   savings amount and percentage.
    #   @return [Types::SavingsOpportunity]
    #
    # @!attribute [rw] current_performance_risk_ratings
    #   An object that describes the performance risk ratings for a given
    #   resource type.
    #   @return [Types::CurrentPerformanceRiskRatings]
    #
    # @!attribute [rw] inferred_workload_savings
    #   An array of objects that describes the estimated monthly saving
    #   amounts for the instances running on the specified
    #   `inferredWorkloadTypes`. The array contains the top five savings
    #   opportunites for the instances that run inferred workload types.
    #   @return [Array<Types::InferredWorkloadSaving>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RecommendationSummary AWS API Documentation
    #
    class RecommendationSummary < Struct.new(
      :summaries,
      :recommendation_resource_type,
      :account_id,
      :savings_opportunity,
      :current_performance_risk_ratings,
      :inferred_workload_savings)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a projected utilization metric of a recommendation option.
    #
    # <note markdown="1"> The `Cpu` and `Memory` metrics are the only projected utilization
    # metrics returned when you run the GetEC2RecommendationProjectedMetrics
    # action. Additionally, the `Memory` metric is returned only for
    # resources that have the unified CloudWatch agent installed on them.
    # For more information, see [Enabling Memory Utilization with the
    # CloudWatch Agent][1].
    #
    #  </note>
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent
    #
    # @!attribute [rw] recommended_instance_type
    #   The recommended instance type.
    #   @return [String]
    #
    # @!attribute [rw] rank
    #   The rank of the recommendation option projected metric.
    #
    #   The top recommendation option is ranked as `1`.
    #
    #   The projected metric rank correlates to the recommendation option
    #   rank. For example, the projected metric ranked as `1` is related to
    #   the recommendation option that is also ranked as `1` in the same
    #   response.
    #   @return [Integer]
    #
    # @!attribute [rw] projected_metrics
    #   An array of objects that describe a projected utilization metric.
    #   @return [Array<Types::ProjectedMetric>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/RecommendedOptionProjectedMetric AWS API Documentation
    #
    class RecommendedOptionProjectedMetric < Struct.new(
      :recommended_instance_type,
      :rank,
      :projected_metrics)
      SENSITIVE = []
      include Aws::Structure
    end

    # A resource that is required for the action doesn't exist.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ResourceNotFoundException AWS API Documentation
    #
    class ResourceNotFoundException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the destination Amazon Simple Storage Service (Amazon S3)
    # bucket name and object keys of a recommendations export file, and its
    # associated metadata file.
    #
    # @!attribute [rw] bucket
    #   The name of the Amazon S3 bucket used as the destination of an
    #   export file.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   The Amazon S3 bucket key of an export file.
    #
    #   The key uniquely identifies the object, or export file, in the S3
    #   bucket.
    #   @return [String]
    #
    # @!attribute [rw] metadata_key
    #   The Amazon S3 bucket key of a metadata file.
    #
    #   The key uniquely identifies the object, or metadata file, in the S3
    #   bucket.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/S3Destination AWS API Documentation
    #
    class S3Destination < Struct.new(
      :bucket,
      :key,
      :metadata_key)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the destination Amazon Simple Storage Service (Amazon S3)
    # bucket name and key prefix for a recommendations export job.
    #
    # You must create the destination Amazon S3 bucket for your
    # recommendations export before you create the export job. Compute
    # Optimizer does not create the S3 bucket for you. After you create the
    # S3 bucket, ensure that it has the required permission policy to allow
    # Compute Optimizer to write the export file to it. If you plan to
    # specify an object prefix when you create the export job, you must
    # include the object prefix in the policy that you add to the S3 bucket.
    # For more information, see [Amazon S3 Bucket Policy for Compute
    # Optimizer][1] in the *Compute Optimizer User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/create-s3-bucket-policy-for-compute-optimizer.html
    #
    # @!attribute [rw] bucket
    #   The name of the Amazon S3 bucket to use as the destination for an
    #   export job.
    #   @return [String]
    #
    # @!attribute [rw] key_prefix
    #   The Amazon S3 bucket prefix for an export job.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/S3DestinationConfig AWS API Documentation
    #
    class S3DestinationConfig < Struct.new(
      :bucket,
      :key_prefix)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the savings opportunity for recommendations of a given
    # resource type or for the recommendation option of an individual
    # resource.
    #
    # Savings opportunity represents the estimated monthly savings you can
    # achieve by implementing a given Compute Optimizer recommendation.
    #
    # Savings opportunity data requires that you opt in to Cost Explorer, as
    # well as activate **Receive Amazon EC2 resource recommendations** in
    # the Cost Explorer preferences page. That creates a connection between
    # Cost Explorer and Compute Optimizer. With this connection, Cost
    # Explorer generates savings estimates considering the price of existing
    # resources, the price of recommended resources, and historical usage
    # data. Estimated monthly savings reflects the projected dollar savings
    # associated with each of the recommendations generated. For more
    # information, see [Enabling Cost Explorer][1] and [Optimizing your cost
    # with Rightsizing Recommendations][2] in the *Cost Management User
    # Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/cost-management/latest/userguide/ce-enable.html
    # [2]: https://docs.aws.amazon.com/cost-management/latest/userguide/ce-rightsizing.html
    #
    # @!attribute [rw] savings_opportunity_percentage
    #   The estimated monthly savings possible as a percentage of monthly
    #   cost by adopting Compute Optimizer recommendations for a given
    #   resource.
    #   @return [Float]
    #
    # @!attribute [rw] estimated_monthly_savings
    #   An object that describes the estimated monthly savings amount
    #   possible by adopting Compute Optimizer recommendations for a given
    #   resource. This is based on the On-Demand instance pricing..
    #   @return [Types::EstimatedMonthlySavings]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/SavingsOpportunity AWS API Documentation
    #
    class SavingsOpportunity < Struct.new(
      :savings_opportunity_percentage,
      :estimated_monthly_savings)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the scope of a recommendation preference.
    #
    # Recommendation preferences can be created at the organization level
    # (for management accounts of an organization only), account level, and
    # resource level. For more information, see [Activating enhanced
    # infrastructure metrics][1] in the *Compute Optimizer User Guide*.
    #
    # <note markdown="1"> You cannot create recommendation preferences for Auto Scaling groups
    # at the organization and account levels. You can create recommendation
    # preferences for Auto Scaling groups only at the resource level by
    # specifying a scope name of `ResourceArn` and a scope value of the Auto
    # Scaling group Amazon Resource Name (ARN). This will configure the
    # preference for all instances that are part of the specified Auto
    # Scaling group. You also cannot create recommendation preferences at
    # the resource level for instances that are part of an Auto Scaling
    # group. You can create recommendation preferences at the resource level
    # only for standalone instances.
    #
    #  </note>
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html
    #
    # @!attribute [rw] name
    #   The name of the scope.
    #
    #   The following scopes are possible:
    #
    #   * `Organization` - Specifies that the recommendation preference
    #     applies at the organization level, for all member accounts of an
    #     organization.
    #
    #   * `AccountId` - Specifies that the recommendation preference applies
    #     at the account level, for all resources of a given resource type
    #     in an account.
    #
    #   * `ResourceArn` - Specifies that the recommendation preference
    #     applies at the individual resource level.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the scope.
    #
    #   If you specified the `name` of the scope as:
    #
    #   * `Organization` - The `value` must be `ALL_ACCOUNTS`.
    #
    #   * `AccountId` - The `value` must be a 12-digit Amazon Web Services
    #     account ID.
    #
    #   * `ResourceArn` - The `value` must be the Amazon Resource Name (ARN)
    #     of an EC2 instance or an Auto Scaling group.
    #
    #   Only EC2 instance and Auto Scaling group ARNs are currently
    #   supported.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/Scope AWS API Documentation
    #
    class Scope < Struct.new(
      :name,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # The Amazon ECS service configurations used for recommendations.
    #
    # @!attribute [rw] memory
    #   The amount of memory used by the tasks in the Amazon ECS service.
    #   @return [Integer]
    #
    # @!attribute [rw] cpu
    #   The number of CPU units used by the tasks in the Amazon ECS service.
    #   @return [Integer]
    #
    # @!attribute [rw] container_configurations
    #   The container configurations within a task of an Amazon ECS service.
    #   @return [Array<Types::ContainerConfiguration>]
    #
    # @!attribute [rw] auto_scaling_configuration
    #   Describes the Auto Scaling configuration methods for an Amazon ECS
    #   service. This affects the generated recommendations. For example, if
    #   Auto Scaling is configured on a service’s CPU, then Compute
    #   Optimizer doesn’t generate CPU size recommendations.
    #
    #   The Auto Scaling configuration methods include:
    #
    #   * `TARGET_TRACKING_SCALING_CPU` — If the Amazon ECS service is
    #     configured to use target scaling on CPU, Compute Optimizer
    #     doesn't generate CPU recommendations.
    #
    #   * `TARGET_TRACKING_SCALING_MEMORY` — If the Amazon ECS service is
    #     configured to use target scaling on memory, Compute Optimizer
    #     doesn't generate memory recommendations.
    #
    #   For more information about step scaling and target scaling, see [
    #   Step scaling policies for Application Auto Scaling][1] and [ Target
    #   tracking scaling policies for Application Auto Scaling][2] in the
    #   *Application Auto Scaling User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html
    #   [2]: https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html
    #   @return [String]
    #
    # @!attribute [rw] task_definition_arn
    #   The task definition ARN used by the tasks in the Amazon ECS service.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ServiceConfiguration AWS API Documentation
    #
    class ServiceConfiguration < Struct.new(
      :memory,
      :cpu,
      :container_configurations,
      :auto_scaling_configuration,
      :task_definition_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # The request has failed due to a temporary failure of the server.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ServiceUnavailableException AWS API Documentation
    #
    class ServiceUnavailableException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The summary of a recommendation.
    #
    # @!attribute [rw] name
    #   The finding classification of the recommendation.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the recommendation summary.
    #   @return [Float]
    #
    # @!attribute [rw] reason_code_summaries
    #   An array of objects that summarize a finding reason code.
    #   @return [Array<Types::ReasonCodeSummary>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/Summary AWS API Documentation
    #
    class Summary < Struct.new(
      :name,
      :value,
      :reason_code_summaries)
      SENSITIVE = []
      include Aws::Structure
    end

    # A list of tag key and value pairs that you define.
    #
    # @!attribute [rw] key
    #   One part of a key-value pair that makes up a tag. A key is a general
    #   label that acts like a category for more specific tag values.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   One part of a key-value pair that make up a tag. A value acts as a
    #   descriptor within a tag category (key). The value can be empty or
    #   null.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/Tag AWS API Documentation
    #
    class Tag < Struct.new(
      :key,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # The request was denied due to request throttling.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ThrottlingException AWS API Documentation
    #
    class ThrottlingException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] status
    #   The new enrollment status of the account.
    #
    #   The following status options are available:
    #
    #   * `Active` - Opts in your account to the Compute Optimizer service.
    #     Compute Optimizer begins analyzing the configuration and
    #     utilization metrics of your Amazon Web Services resources after
    #     you opt in. For more information, see [Metrics analyzed by Compute
    #     Optimizer][1] in the *Compute Optimizer User Guide*.
    #
    #   * `Inactive` - Opts out your account from the Compute Optimizer
    #     service. Your account's recommendations and related metrics data
    #     will be deleted from Compute Optimizer after you opt out.
    #
    #   <note markdown="1"> The `Pending` and `Failed` options cannot be used to update the
    #   enrollment status of an account. They are returned in the response
    #   of a request to update the enrollment status of an account.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html
    #   @return [String]
    #
    # @!attribute [rw] include_member_accounts
    #   Indicates whether to enroll member accounts of the organization if
    #   the account is the management account of an organization.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/UpdateEnrollmentStatusRequest AWS API Documentation
    #
    class UpdateEnrollmentStatusRequest < Struct.new(
      :status,
      :include_member_accounts)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] status
    #   The enrollment status of the account.
    #   @return [String]
    #
    # @!attribute [rw] status_reason
    #   The reason for the enrollment status of the account. For example, an
    #   account might show a status of `Pending` because member accounts of
    #   an organization require more time to be enrolled in the service.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/UpdateEnrollmentStatusResponse AWS API Documentation
    #
    class UpdateEnrollmentStatusResponse < Struct.new(
      :status,
      :status_reason)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a utilization metric of a resource, such as an Amazon EC2
    # instance.
    #
    # Compare the utilization metric data of your resource against its
    # projected utilization metric data to determine the performance
    # difference between your current resource and the recommended option.
    #
    # @!attribute [rw] name
    #   The name of the utilization metric.
    #
    #   The following utilization metrics are available:
    #
    #   * `Cpu` - The percentage of allocated EC2 compute units that are
    #     currently in use on the instance. This metric identifies the
    #     processing power required to run an application on the instance.
    #
    #     Depending on the instance type, tools in your operating system can
    #     show a lower percentage than CloudWatch when the instance is not
    #     allocated a full processor core.
    #
    #     Units: Percent
    #
    #   * `Memory` - The percentage of memory that is currently in use on
    #     the instance. This metric identifies the amount of memory required
    #     to run an application on the instance.
    #
    #     Units: Percent
    #
    #     <note markdown="1"> The `Memory` metric is returned only for resources that have the
    #     unified CloudWatch agent installed on them. For more information,
    #     see [Enabling Memory Utilization with the CloudWatch Agent][1].
    #
    #      </note>
    #
    #   * `GPU` - The percentage of allocated GPUs that currently run on the
    #     instance.
    #
    #   * `GPU_MEMORY` - The percentage of total GPU memory that currently
    #     runs on the instance.
    #
    #     <note markdown="1"> The `GPU` and `GPU_MEMORY` metrics are only returned for resources
    #     with the unified CloudWatch Agent installed on them. For more
    #     information, see [Enabling NVIDIA GPU utilization with the
    #     CloudWatch Agent][2].
    #
    #      </note>
    #
    #   * `EBS_READ_OPS_PER_SECOND` - The completed read operations from all
    #     EBS volumes attached to the instance in a specified period of
    #     time.
    #
    #     Unit: Count
    #
    #   * `EBS_WRITE_OPS_PER_SECOND` - The completed write operations to all
    #     EBS volumes attached to the instance in a specified period of
    #     time.
    #
    #     Unit: Count
    #
    #   * `EBS_READ_BYTES_PER_SECOND` - The bytes read from all EBS volumes
    #     attached to the instance in a specified period of time.
    #
    #     Unit: Bytes
    #
    #   * `EBS_WRITE_BYTES_PER_SECOND` - The bytes written to all EBS
    #     volumes attached to the instance in a specified period of time.
    #
    #     Unit: Bytes
    #
    #   * `DISK_READ_OPS_PER_SECOND` - The completed read operations from
    #     all instance store volumes available to the instance in a
    #     specified period of time.
    #
    #     If there are no instance store volumes, either the value is `0` or
    #     the metric is not reported.
    #
    #   * `DISK_WRITE_OPS_PER_SECOND` - The completed write operations from
    #     all instance store volumes available to the instance in a
    #     specified period of time.
    #
    #     If there are no instance store volumes, either the value is `0` or
    #     the metric is not reported.
    #
    #   * `DISK_READ_BYTES_PER_SECOND` - The bytes read from all instance
    #     store volumes available to the instance. This metric is used to
    #     determine the volume of the data the application reads from the
    #     disk of the instance. This can be used to determine the speed of
    #     the application.
    #
    #     If there are no instance store volumes, either the value is `0` or
    #     the metric is not reported.
    #
    #   * `DISK_WRITE_BYTES_PER_SECOND` - The bytes written to all instance
    #     store volumes available to the instance. This metric is used to
    #     determine the volume of the data the application writes onto the
    #     disk of the instance. This can be used to determine the speed of
    #     the application.
    #
    #     If there are no instance store volumes, either the value is `0` or
    #     the metric is not reported.
    #
    #   * `NETWORK_IN_BYTES_PER_SECOND` - The number of bytes received by
    #     the instance on all network interfaces. This metric identifies the
    #     volume of incoming network traffic to a single instance.
    #
    #   * `NETWORK_OUT_BYTES_PER_SECOND` - The number of bytes sent out by
    #     the instance on all network interfaces. This metric identifies the
    #     volume of outgoing network traffic from a single instance.
    #
    #   * `NETWORK_PACKETS_IN_PER_SECOND` - The number of packets received
    #     by the instance on all network interfaces. This metric identifies
    #     the volume of incoming traffic in terms of the number of packets
    #     on a single instance.
    #
    #   * `NETWORK_PACKETS_OUT_PER_SECOND` - The number of packets sent out
    #     by the instance on all network interfaces. This metric identifies
    #     the volume of outgoing traffic in terms of the number of packets
    #     on a single instance.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent
    #   [2]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#nvidia-cw-agent
    #   @return [String]
    #
    # @!attribute [rw] statistic
    #   The statistic of the utilization metric.
    #
    #   The Compute Optimizer API, Command Line Interface (CLI), and SDKs
    #   return utilization metrics using only the `Maximum` statistic, which
    #   is the highest value observed during the specified period.
    #
    #   The Compute Optimizer console displays graphs for some utilization
    #   metrics using the `Average` statistic, which is the value of `Sum` /
    #   `SampleCount` during the specified period. For more information, see
    #   [Viewing resource recommendations][1] in the *Compute Optimizer User
    #   Guide*. You can also get averaged utilization metric data for your
    #   resources using Amazon CloudWatch. For more information, see the
    #   [Amazon CloudWatch User Guide][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/compute-optimizer/latest/ug/viewing-recommendations.html
    #   [2]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the utilization metric.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/UtilizationMetric AWS API Documentation
    #
    class UtilizationMetric < Struct.new(
      :name,
      :statistic,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # The preference to control the resource’s CPU utilization threshold,
    # CPU utilization headroom, and memory utilization headroom.
    #
    # <note markdown="1"> This preference is only available for the Amazon EC2 instance resource
    # type.
    #
    #  </note>
    #
    # @!attribute [rw] metric_name
    #   The name of the resource utilization metric name to customize.
    #   @return [String]
    #
    # @!attribute [rw] metric_parameters
    #   The parameters to set when customizing the resource utilization
    #   thresholds.
    #   @return [Types::CustomizableMetricParameters]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/UtilizationPreference AWS API Documentation
    #
    class UtilizationPreference < Struct.new(
      :metric_name,
      :metric_parameters)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the configuration of an Amazon Elastic Block Store (Amazon
    # EBS) volume.
    #
    # @!attribute [rw] volume_type
    #   The volume type.
    #
    #   This can be `gp2` for General Purpose SSD, `io1` or `io2` for
    #   Provisioned IOPS SSD, `st1` for Throughput Optimized HDD, `sc1` for
    #   Cold HDD, or `standard` for Magnetic volumes.
    #   @return [String]
    #
    # @!attribute [rw] volume_size
    #   The size of the volume, in GiB.
    #   @return [Integer]
    #
    # @!attribute [rw] volume_baseline_iops
    #   The baseline IOPS of the volume.
    #   @return [Integer]
    #
    # @!attribute [rw] volume_burst_iops
    #   The burst IOPS of the volume.
    #   @return [Integer]
    #
    # @!attribute [rw] volume_baseline_throughput
    #   The baseline throughput of the volume.
    #   @return [Integer]
    #
    # @!attribute [rw] volume_burst_throughput
    #   The burst throughput of the volume.
    #   @return [Integer]
    #
    # @!attribute [rw] root_volume
    #   Contains the image used to boot the instance during launch.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/VolumeConfiguration AWS API Documentation
    #
    class VolumeConfiguration < Struct.new(
      :volume_type,
      :volume_size,
      :volume_baseline_iops,
      :volume_burst_iops,
      :volume_baseline_throughput,
      :volume_burst_throughput,
      :root_volume)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an Amazon Elastic Block Store (Amazon EBS) volume
    # recommendation.
    #
    # @!attribute [rw] volume_arn
    #   The Amazon Resource Name (ARN) of the current volume.
    #   @return [String]
    #
    # @!attribute [rw] account_id
    #   The Amazon Web Services account ID of the volume.
    #   @return [String]
    #
    # @!attribute [rw] current_configuration
    #   An array of objects that describe the current configuration of the
    #   volume.
    #   @return [Types::VolumeConfiguration]
    #
    # @!attribute [rw] finding
    #   The finding classification of the volume.
    #
    #   Findings for volumes include:
    #
    #   * <b> <code>NotOptimized</code> </b>—A volume is considered not
    #     optimized when Compute Optimizer identifies a recommendation that
    #     can provide better performance for your workload.
    #
    #   * <b> <code>Optimized</code> </b>—An volume is considered optimized
    #     when Compute Optimizer determines that the volume is correctly
    #     provisioned to run your workload based on the chosen volume type.
    #     For optimized resources, Compute Optimizer might recommend a new
    #     generation volume type.
    #   @return [String]
    #
    # @!attribute [rw] utilization_metrics
    #   An array of objects that describe the utilization metrics of the
    #   volume.
    #   @return [Array<Types::EBSUtilizationMetric>]
    #
    # @!attribute [rw] look_back_period_in_days
    #   The number of days for which utilization metrics were analyzed for
    #   the volume.
    #   @return [Float]
    #
    # @!attribute [rw] volume_recommendation_options
    #   An array of objects that describe the recommendation options for the
    #   volume.
    #   @return [Array<Types::VolumeRecommendationOption>]
    #
    # @!attribute [rw] last_refresh_timestamp
    #   The timestamp of when the volume recommendation was last generated.
    #   @return [Time]
    #
    # @!attribute [rw] current_performance_risk
    #   The risk of the current EBS volume not meeting the performance needs
    #   of its workloads. The higher the risk, the more likely the current
    #   EBS volume doesn't have sufficient capacity.
    #   @return [String]
    #
    # @!attribute [rw] effective_recommendation_preferences
    #   Describes the effective recommendation preferences for Amazon EBS
    #   volume.
    #   @return [Types::EBSEffectiveRecommendationPreferences]
    #
    # @!attribute [rw] tags
    #   A list of tags assigned to your Amazon EBS volume recommendations.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/VolumeRecommendation AWS API Documentation
    #
    class VolumeRecommendation < Struct.new(
      :volume_arn,
      :account_id,
      :current_configuration,
      :finding,
      :utilization_metrics,
      :look_back_period_in_days,
      :volume_recommendation_options,
      :last_refresh_timestamp,
      :current_performance_risk,
      :effective_recommendation_preferences,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a recommendation option for an Amazon Elastic Block Store
    # (Amazon EBS) instance.
    #
    # @!attribute [rw] configuration
    #   An array of objects that describe a volume configuration.
    #   @return [Types::VolumeConfiguration]
    #
    # @!attribute [rw] performance_risk
    #   The performance risk of the volume recommendation option.
    #
    #   Performance risk is the likelihood of the recommended volume type
    #   meeting the performance requirement of your workload.
    #
    #   The value ranges from `0` - `4`, with `0` meaning that the
    #   recommended resource is predicted to always provide enough hardware
    #   capability. The higher the performance risk is, the more likely you
    #   should validate whether the recommendation will meet the performance
    #   requirements of your workload before migrating your resource.
    #   @return [Float]
    #
    # @!attribute [rw] rank
    #   The rank of the volume recommendation option.
    #
    #   The top recommendation option is ranked as `1`.
    #   @return [Integer]
    #
    # @!attribute [rw] savings_opportunity
    #   An object that describes the savings opportunity for the EBS volume
    #   recommendation option. Savings opportunity includes the estimated
    #   monthly savings amount and percentage.
    #   @return [Types::SavingsOpportunity]
    #
    # @!attribute [rw] savings_opportunity_after_discounts
    #   An object that describes the savings opportunity for the Amazon EBS
    #   volume recommendation option with specific discounts. Savings
    #   opportunity includes the estimated monthly savings and percentage.
    #   @return [Types::EBSSavingsOpportunityAfterDiscounts]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/VolumeRecommendationOption AWS API Documentation
    #
    class VolumeRecommendationOption < Struct.new(
      :configuration,
      :performance_risk,
      :rank,
      :savings_opportunity,
      :savings_opportunity_after_discounts)
      SENSITIVE = []
      include Aws::Structure
    end

  end
end