{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE NoImplicitPrelude #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-unused-matches #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Amazonka.ComputeOptimizer.Types.InstanceRecommendation -- Copyright : (c) 2013-2023 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) module Amazonka.ComputeOptimizer.Types.InstanceRecommendation where import Amazonka.ComputeOptimizer.Types.CurrentPerformanceRisk import Amazonka.ComputeOptimizer.Types.EffectiveRecommendationPreferences import Amazonka.ComputeOptimizer.Types.Finding import Amazonka.ComputeOptimizer.Types.InferredWorkloadType import Amazonka.ComputeOptimizer.Types.InstanceRecommendationFindingReasonCode import Amazonka.ComputeOptimizer.Types.InstanceRecommendationOption import Amazonka.ComputeOptimizer.Types.RecommendationSource import Amazonka.ComputeOptimizer.Types.UtilizationMetric import qualified Amazonka.Core as Core import qualified Amazonka.Core.Lens.Internal as Lens import qualified Amazonka.Data as Data import qualified Amazonka.Prelude as Prelude -- | Describes an Amazon EC2 instance recommendation. -- -- /See:/ 'newInstanceRecommendation' smart constructor. data InstanceRecommendation = InstanceRecommendation' { -- | The Amazon Web Services account ID of the instance. accountId :: Prelude.Maybe Prelude.Text, -- | The instance type of the current instance. currentInstanceType :: Prelude.Maybe Prelude.Text, -- | 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. currentPerformanceRisk :: Prelude.Maybe CurrentPerformanceRisk, -- | An object that describes the effective recommendation preferences for -- the instance. effectiveRecommendationPreferences :: Prelude.Maybe EffectiveRecommendationPreferences, -- | The finding classification of the instance. -- -- Findings for instances include: -- -- - __@Underprovisioned@__ —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. -- -- - __@Overprovisioned@__ —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. -- -- - __@Optimized@__ —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. finding :: Prelude.Maybe Finding, -- | The reason for the finding classification of the instance. -- -- Finding reason codes for instances include: -- -- - __@CPUOverprovisioned@__ — 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. -- -- - __@CPUUnderprovisioned@__ — 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. -- -- - __@MemoryOverprovisioned@__ — 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. -- -- - __@MemoryUnderprovisioned@__ — 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. -- -- Memory utilization is analyzed only for resources that have the -- unified CloudWatch agent installed on them. For more information, -- see -- -- 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. -- -- - __@EBSThroughputOverprovisioned@__ — 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 -- @VolumeReadOps@ and @VolumeWriteOps@ metrics of EBS volumes attached -- to the current instance during the look-back period. -- -- - __@EBSThroughputUnderprovisioned@__ — 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 @VolumeReadOps@ and @VolumeWriteOps@ metrics of EBS volumes -- attached to the current instance during the look-back period. -- -- - __@EBSIOPSOverprovisioned@__ — 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 -- @VolumeReadBytes@ and @VolumeWriteBytes@ metric of EBS volumes -- attached to the current instance during the look-back period. -- -- - __@EBSIOPSUnderprovisioned@__ — 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 -- @VolumeReadBytes@ and @VolumeWriteBytes@ metric of EBS volumes -- attached to the current instance during the look-back period. -- -- - __@NetworkBandwidthOverprovisioned@__ — 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. -- -- - __@NetworkBandwidthUnderprovisioned@__ — 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. -- -- - __@NetworkPPSOverprovisioned@__ — 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. -- -- - __@NetworkPPSUnderprovisioned@__ — 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. -- -- - __@DiskIOPSOverprovisioned@__ — 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. -- -- - __@DiskIOPSUnderprovisioned@__ — 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. -- -- - __@DiskThroughputOverprovisioned@__ — 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. -- -- - __@DiskThroughputUnderprovisioned@__ — 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. -- -- For more information about instance metrics, see -- -- in the /Amazon Elastic Compute Cloud User Guide/. For more information -- about EBS volume metrics, see -- -- in the /Amazon Elastic Compute Cloud User Guide/. findingReasonCodes :: Prelude.Maybe [InstanceRecommendationFindingReasonCode], -- | 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. inferredWorkloadTypes :: Prelude.Maybe [InferredWorkloadType], -- | The Amazon Resource Name (ARN) of the current instance. instanceArn :: Prelude.Maybe Prelude.Text, -- | The name of the current instance. instanceName :: Prelude.Maybe Prelude.Text, -- | The timestamp of when the instance recommendation was last generated. lastRefreshTimestamp :: Prelude.Maybe Data.POSIX, -- | The number of days for which utilization metrics were analyzed for the -- instance. lookBackPeriodInDays :: Prelude.Maybe Prelude.Double, -- | An array of objects that describe the recommendation options for the -- instance. recommendationOptions :: Prelude.Maybe [InstanceRecommendationOption], -- | An array of objects that describe the source resource of the -- recommendation. recommendationSources :: Prelude.Maybe [RecommendationSource], -- | An array of objects that describe the utilization metrics of the -- instance. utilizationMetrics :: Prelude.Maybe [UtilizationMetric] } deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic) -- | -- Create a value of 'InstanceRecommendation' with all optional fields omitted. -- -- Use or to modify other optional fields. -- -- The following record fields are available, with the corresponding lenses provided -- for backwards compatibility: -- -- 'accountId', 'instanceRecommendation_accountId' - The Amazon Web Services account ID of the instance. -- -- 'currentInstanceType', 'instanceRecommendation_currentInstanceType' - The instance type of the current instance. -- -- 'currentPerformanceRisk', 'instanceRecommendation_currentPerformanceRisk' - 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. -- -- 'effectiveRecommendationPreferences', 'instanceRecommendation_effectiveRecommendationPreferences' - An object that describes the effective recommendation preferences for -- the instance. -- -- 'finding', 'instanceRecommendation_finding' - The finding classification of the instance. -- -- Findings for instances include: -- -- - __@Underprovisioned@__ —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. -- -- - __@Overprovisioned@__ —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. -- -- - __@Optimized@__ —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. -- -- 'findingReasonCodes', 'instanceRecommendation_findingReasonCodes' - The reason for the finding classification of the instance. -- -- Finding reason codes for instances include: -- -- - __@CPUOverprovisioned@__ — 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. -- -- - __@CPUUnderprovisioned@__ — 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. -- -- - __@MemoryOverprovisioned@__ — 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. -- -- - __@MemoryUnderprovisioned@__ — 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. -- -- Memory utilization is analyzed only for resources that have the -- unified CloudWatch agent installed on them. For more information, -- see -- -- 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. -- -- - __@EBSThroughputOverprovisioned@__ — 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 -- @VolumeReadOps@ and @VolumeWriteOps@ metrics of EBS volumes attached -- to the current instance during the look-back period. -- -- - __@EBSThroughputUnderprovisioned@__ — 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 @VolumeReadOps@ and @VolumeWriteOps@ metrics of EBS volumes -- attached to the current instance during the look-back period. -- -- - __@EBSIOPSOverprovisioned@__ — 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 -- @VolumeReadBytes@ and @VolumeWriteBytes@ metric of EBS volumes -- attached to the current instance during the look-back period. -- -- - __@EBSIOPSUnderprovisioned@__ — 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 -- @VolumeReadBytes@ and @VolumeWriteBytes@ metric of EBS volumes -- attached to the current instance during the look-back period. -- -- - __@NetworkBandwidthOverprovisioned@__ — 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. -- -- - __@NetworkBandwidthUnderprovisioned@__ — 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. -- -- - __@NetworkPPSOverprovisioned@__ — 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. -- -- - __@NetworkPPSUnderprovisioned@__ — 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. -- -- - __@DiskIOPSOverprovisioned@__ — 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. -- -- - __@DiskIOPSUnderprovisioned@__ — 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. -- -- - __@DiskThroughputOverprovisioned@__ — 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. -- -- - __@DiskThroughputUnderprovisioned@__ — 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. -- -- For more information about instance metrics, see -- -- in the /Amazon Elastic Compute Cloud User Guide/. For more information -- about EBS volume metrics, see -- -- in the /Amazon Elastic Compute Cloud User Guide/. -- -- 'inferredWorkloadTypes', 'instanceRecommendation_inferredWorkloadTypes' - 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. -- -- 'instanceArn', 'instanceRecommendation_instanceArn' - The Amazon Resource Name (ARN) of the current instance. -- -- 'instanceName', 'instanceRecommendation_instanceName' - The name of the current instance. -- -- 'lastRefreshTimestamp', 'instanceRecommendation_lastRefreshTimestamp' - The timestamp of when the instance recommendation was last generated. -- -- 'lookBackPeriodInDays', 'instanceRecommendation_lookBackPeriodInDays' - The number of days for which utilization metrics were analyzed for the -- instance. -- -- 'recommendationOptions', 'instanceRecommendation_recommendationOptions' - An array of objects that describe the recommendation options for the -- instance. -- -- 'recommendationSources', 'instanceRecommendation_recommendationSources' - An array of objects that describe the source resource of the -- recommendation. -- -- 'utilizationMetrics', 'instanceRecommendation_utilizationMetrics' - An array of objects that describe the utilization metrics of the -- instance. newInstanceRecommendation :: InstanceRecommendation newInstanceRecommendation = InstanceRecommendation' { accountId = Prelude.Nothing, currentInstanceType = Prelude.Nothing, currentPerformanceRisk = Prelude.Nothing, effectiveRecommendationPreferences = Prelude.Nothing, finding = Prelude.Nothing, findingReasonCodes = Prelude.Nothing, inferredWorkloadTypes = Prelude.Nothing, instanceArn = Prelude.Nothing, instanceName = Prelude.Nothing, lastRefreshTimestamp = Prelude.Nothing, lookBackPeriodInDays = Prelude.Nothing, recommendationOptions = Prelude.Nothing, recommendationSources = Prelude.Nothing, utilizationMetrics = Prelude.Nothing } -- | The Amazon Web Services account ID of the instance. instanceRecommendation_accountId :: Lens.Lens' InstanceRecommendation (Prelude.Maybe Prelude.Text) instanceRecommendation_accountId = Lens.lens (\InstanceRecommendation' {accountId} -> accountId) (\s@InstanceRecommendation' {} a -> s {accountId = a} :: InstanceRecommendation) -- | The instance type of the current instance. instanceRecommendation_currentInstanceType :: Lens.Lens' InstanceRecommendation (Prelude.Maybe Prelude.Text) instanceRecommendation_currentInstanceType = Lens.lens (\InstanceRecommendation' {currentInstanceType} -> currentInstanceType) (\s@InstanceRecommendation' {} a -> s {currentInstanceType = a} :: InstanceRecommendation) -- | 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. instanceRecommendation_currentPerformanceRisk :: Lens.Lens' InstanceRecommendation (Prelude.Maybe CurrentPerformanceRisk) instanceRecommendation_currentPerformanceRisk = Lens.lens (\InstanceRecommendation' {currentPerformanceRisk} -> currentPerformanceRisk) (\s@InstanceRecommendation' {} a -> s {currentPerformanceRisk = a} :: InstanceRecommendation) -- | An object that describes the effective recommendation preferences for -- the instance. instanceRecommendation_effectiveRecommendationPreferences :: Lens.Lens' InstanceRecommendation (Prelude.Maybe EffectiveRecommendationPreferences) instanceRecommendation_effectiveRecommendationPreferences = Lens.lens (\InstanceRecommendation' {effectiveRecommendationPreferences} -> effectiveRecommendationPreferences) (\s@InstanceRecommendation' {} a -> s {effectiveRecommendationPreferences = a} :: InstanceRecommendation) -- | The finding classification of the instance. -- -- Findings for instances include: -- -- - __@Underprovisioned@__ —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. -- -- - __@Overprovisioned@__ —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. -- -- - __@Optimized@__ —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. instanceRecommendation_finding :: Lens.Lens' InstanceRecommendation (Prelude.Maybe Finding) instanceRecommendation_finding = Lens.lens (\InstanceRecommendation' {finding} -> finding) (\s@InstanceRecommendation' {} a -> s {finding = a} :: InstanceRecommendation) -- | The reason for the finding classification of the instance. -- -- Finding reason codes for instances include: -- -- - __@CPUOverprovisioned@__ — 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. -- -- - __@CPUUnderprovisioned@__ — 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. -- -- - __@MemoryOverprovisioned@__ — 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. -- -- - __@MemoryUnderprovisioned@__ — 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. -- -- Memory utilization is analyzed only for resources that have the -- unified CloudWatch agent installed on them. For more information, -- see -- -- 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. -- -- - __@EBSThroughputOverprovisioned@__ — 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 -- @VolumeReadOps@ and @VolumeWriteOps@ metrics of EBS volumes attached -- to the current instance during the look-back period. -- -- - __@EBSThroughputUnderprovisioned@__ — 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 @VolumeReadOps@ and @VolumeWriteOps@ metrics of EBS volumes -- attached to the current instance during the look-back period. -- -- - __@EBSIOPSOverprovisioned@__ — 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 -- @VolumeReadBytes@ and @VolumeWriteBytes@ metric of EBS volumes -- attached to the current instance during the look-back period. -- -- - __@EBSIOPSUnderprovisioned@__ — 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 -- @VolumeReadBytes@ and @VolumeWriteBytes@ metric of EBS volumes -- attached to the current instance during the look-back period. -- -- - __@NetworkBandwidthOverprovisioned@__ — 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. -- -- - __@NetworkBandwidthUnderprovisioned@__ — 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. -- -- - __@NetworkPPSOverprovisioned@__ — 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. -- -- - __@NetworkPPSUnderprovisioned@__ — 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. -- -- - __@DiskIOPSOverprovisioned@__ — 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. -- -- - __@DiskIOPSUnderprovisioned@__ — 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. -- -- - __@DiskThroughputOverprovisioned@__ — 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. -- -- - __@DiskThroughputUnderprovisioned@__ — 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. -- -- For more information about instance metrics, see -- -- in the /Amazon Elastic Compute Cloud User Guide/. For more information -- about EBS volume metrics, see -- -- in the /Amazon Elastic Compute Cloud User Guide/. instanceRecommendation_findingReasonCodes :: Lens.Lens' InstanceRecommendation (Prelude.Maybe [InstanceRecommendationFindingReasonCode]) instanceRecommendation_findingReasonCodes = Lens.lens (\InstanceRecommendation' {findingReasonCodes} -> findingReasonCodes) (\s@InstanceRecommendation' {} a -> s {findingReasonCodes = a} :: InstanceRecommendation) Prelude.. Lens.mapping Lens.coerced -- | 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. instanceRecommendation_inferredWorkloadTypes :: Lens.Lens' InstanceRecommendation (Prelude.Maybe [InferredWorkloadType]) instanceRecommendation_inferredWorkloadTypes = Lens.lens (\InstanceRecommendation' {inferredWorkloadTypes} -> inferredWorkloadTypes) (\s@InstanceRecommendation' {} a -> s {inferredWorkloadTypes = a} :: InstanceRecommendation) Prelude.. Lens.mapping Lens.coerced -- | The Amazon Resource Name (ARN) of the current instance. instanceRecommendation_instanceArn :: Lens.Lens' InstanceRecommendation (Prelude.Maybe Prelude.Text) instanceRecommendation_instanceArn = Lens.lens (\InstanceRecommendation' {instanceArn} -> instanceArn) (\s@InstanceRecommendation' {} a -> s {instanceArn = a} :: InstanceRecommendation) -- | The name of the current instance. instanceRecommendation_instanceName :: Lens.Lens' InstanceRecommendation (Prelude.Maybe Prelude.Text) instanceRecommendation_instanceName = Lens.lens (\InstanceRecommendation' {instanceName} -> instanceName) (\s@InstanceRecommendation' {} a -> s {instanceName = a} :: InstanceRecommendation) -- | The timestamp of when the instance recommendation was last generated. instanceRecommendation_lastRefreshTimestamp :: Lens.Lens' InstanceRecommendation (Prelude.Maybe Prelude.UTCTime) instanceRecommendation_lastRefreshTimestamp = Lens.lens (\InstanceRecommendation' {lastRefreshTimestamp} -> lastRefreshTimestamp) (\s@InstanceRecommendation' {} a -> s {lastRefreshTimestamp = a} :: InstanceRecommendation) Prelude.. Lens.mapping Data._Time -- | The number of days for which utilization metrics were analyzed for the -- instance. instanceRecommendation_lookBackPeriodInDays :: Lens.Lens' InstanceRecommendation (Prelude.Maybe Prelude.Double) instanceRecommendation_lookBackPeriodInDays = Lens.lens (\InstanceRecommendation' {lookBackPeriodInDays} -> lookBackPeriodInDays) (\s@InstanceRecommendation' {} a -> s {lookBackPeriodInDays = a} :: InstanceRecommendation) -- | An array of objects that describe the recommendation options for the -- instance. instanceRecommendation_recommendationOptions :: Lens.Lens' InstanceRecommendation (Prelude.Maybe [InstanceRecommendationOption]) instanceRecommendation_recommendationOptions = Lens.lens (\InstanceRecommendation' {recommendationOptions} -> recommendationOptions) (\s@InstanceRecommendation' {} a -> s {recommendationOptions = a} :: InstanceRecommendation) Prelude.. Lens.mapping Lens.coerced -- | An array of objects that describe the source resource of the -- recommendation. instanceRecommendation_recommendationSources :: Lens.Lens' InstanceRecommendation (Prelude.Maybe [RecommendationSource]) instanceRecommendation_recommendationSources = Lens.lens (\InstanceRecommendation' {recommendationSources} -> recommendationSources) (\s@InstanceRecommendation' {} a -> s {recommendationSources = a} :: InstanceRecommendation) Prelude.. Lens.mapping Lens.coerced -- | An array of objects that describe the utilization metrics of the -- instance. instanceRecommendation_utilizationMetrics :: Lens.Lens' InstanceRecommendation (Prelude.Maybe [UtilizationMetric]) instanceRecommendation_utilizationMetrics = Lens.lens (\InstanceRecommendation' {utilizationMetrics} -> utilizationMetrics) (\s@InstanceRecommendation' {} a -> s {utilizationMetrics = a} :: InstanceRecommendation) Prelude.. Lens.mapping Lens.coerced instance Data.FromJSON InstanceRecommendation where parseJSON = Data.withObject "InstanceRecommendation" ( \x -> InstanceRecommendation' Prelude.<$> (x Data..:? "accountId") Prelude.<*> (x Data..:? "currentInstanceType") Prelude.<*> (x Data..:? "currentPerformanceRisk") Prelude.<*> (x Data..:? "effectiveRecommendationPreferences") Prelude.<*> (x Data..:? "finding") Prelude.<*> ( x Data..:? "findingReasonCodes" Data..!= Prelude.mempty ) Prelude.<*> ( x Data..:? "inferredWorkloadTypes" Data..!= Prelude.mempty ) Prelude.<*> (x Data..:? "instanceArn") Prelude.<*> (x Data..:? "instanceName") Prelude.<*> (x Data..:? "lastRefreshTimestamp") Prelude.<*> (x Data..:? "lookBackPeriodInDays") Prelude.<*> ( x Data..:? "recommendationOptions" Data..!= Prelude.mempty ) Prelude.<*> ( x Data..:? "recommendationSources" Data..!= Prelude.mempty ) Prelude.<*> ( x Data..:? "utilizationMetrics" Data..!= Prelude.mempty ) ) instance Prelude.Hashable InstanceRecommendation where hashWithSalt _salt InstanceRecommendation' {..} = _salt `Prelude.hashWithSalt` accountId `Prelude.hashWithSalt` currentInstanceType `Prelude.hashWithSalt` currentPerformanceRisk `Prelude.hashWithSalt` effectiveRecommendationPreferences `Prelude.hashWithSalt` finding `Prelude.hashWithSalt` findingReasonCodes `Prelude.hashWithSalt` inferredWorkloadTypes `Prelude.hashWithSalt` instanceArn `Prelude.hashWithSalt` instanceName `Prelude.hashWithSalt` lastRefreshTimestamp `Prelude.hashWithSalt` lookBackPeriodInDays `Prelude.hashWithSalt` recommendationOptions `Prelude.hashWithSalt` recommendationSources `Prelude.hashWithSalt` utilizationMetrics instance Prelude.NFData InstanceRecommendation where rnf InstanceRecommendation' {..} = Prelude.rnf accountId `Prelude.seq` Prelude.rnf currentInstanceType `Prelude.seq` Prelude.rnf currentPerformanceRisk `Prelude.seq` Prelude.rnf effectiveRecommendationPreferences `Prelude.seq` Prelude.rnf finding `Prelude.seq` Prelude.rnf findingReasonCodes `Prelude.seq` Prelude.rnf inferredWorkloadTypes `Prelude.seq` Prelude.rnf instanceArn `Prelude.seq` Prelude.rnf instanceName `Prelude.seq` Prelude.rnf lastRefreshTimestamp `Prelude.seq` Prelude.rnf lookBackPeriodInDays `Prelude.seq` Prelude.rnf recommendationOptions `Prelude.seq` Prelude.rnf recommendationSources `Prelude.seq` Prelude.rnf utilizationMetrics