Skip to content

Commit

Permalink
POL-1355 New Policy: AWS Rightsize ElastiCache (#2702)
Browse files Browse the repository at this point in the history
* update

* fix

* update

* fix

* update

* fix

* comimt

* update

* update

* update

* update

* update

* update
  • Loading branch information
XOmniverse authored Oct 9, 2024
1 parent b370b67 commit 9c106c7
Show file tree
Hide file tree
Showing 9 changed files with 3,059 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .spellignore
Original file line number Diff line number Diff line change
Expand Up @@ -585,3 +585,7 @@ ByteCount
PacketCount
balancers
backfill
ElastiCache
elasticache
oversized
freeable
5 changes: 5 additions & 0 deletions cost/aws/rightsize_elasticache/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Changelog

## v0.1.0

- Initial release
96 changes: 96 additions & 0 deletions cost/aws/rightsize_elasticache/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# AWS Rightsize ElastiCache

## What It Does

This policy template reports any underutilized AWS ElastiCache resources based on CPU and memory usage. Optionally, this report can be emailed and oversized resources can be downsized.

### Policy Savings Details

The policy includes the estimated monthly savings. The estimated monthly savings is recognized if the resource is downsized.

- The `Estimated Monthly Savings` is calculated by multiplying the amortized cost of the resource for 1 day, as found within Flexera CCO, by 30.44, which is the average number of days in a month.
- Savings is estimated at 50% of the current cost of the resource.
- Since the costs of individual resources are obtained from Flexera CCO, they will take into account any Flexera adjustment rules or cloud provider discounts present in the Flexera platform.
- If the resource cannot be found in Flexera CCO, the `Estimated Monthly Savings` is 0.
- The incident message detail includes the sum of each resource `Estimated Monthly Savings` as `Potential Monthly Savings`.
- Both `Estimated Monthly Savings` and `Potential Monthly Savings` will be reported in the currency of the Flexera organization the policy is applied in.

## Input Parameters

- *Email Addresses* - Email addresses of the recipients you wish to notify when new incidents are created.
- *Account Number* - The Account number for use with the AWS STS Cross Account Role. Leave blank when using AWS IAM Access key and secret. It only needs to be passed when the desired AWS account is different than the one associated with the Flexera One credential. [More information is available in our documentation.](https://docs.flexera.com/flexera/EN/Automation/ProviderCredentials.htm#automationadmin_1982464505_1123608)
- *Allow/Deny Regions* - Whether to treat Allow/Deny Regions List parameter as allow or deny list. Has no effect if Allow/Deny Regions List is left empty.
- *Allow/Deny Regions List* - A list of regions to allow or deny for an AWS account. Please enter the regions code if SCP is enabled. See [Available Regions](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions) in AWS; otherwise, the policy may fail on regions that are disabled via SCP. Leave blank to consider all the regions.
- *Exclusion Tags* - The policy will filter resources containing the specified tags from the results. The following formats are supported:
- `Key` - Filter all resources with the specified tag key.
- `Key==Value` - Filter all resources with the specified tag key:value pair.
- `Key!=Value` - Filter all resources missing the specified tag key:value pair. This will also filter all resources missing the specified tag key.
- `Key=~/Regex/` - Filter all resources where the value for the specified key matches the specified regex string.
- `Key!~/Regex/` - Filter all resources where the value for the specified key does not match the specified regex string. This will also filter all resources missing the specified tag key.
- *Exclusion Tags: Any / All* - Whether to filter instances containing any of the specified tags or only those that contain all of them. Only applicable if more than one value is entered in the `Exclusion Tags` field.
- *Statistic Lookback Period* - How many days back to look at CPU and memory usage data for clusters. This value cannot be set higher than 90 because AWS does not retain metrics for longer than 90 days.
- *Threshold Statistic* - Statistic to use when determining if a cluster is underutilized.
- *CPU Threshold (%)* - The CPU threshold at which to consider a cluster to be 'underutilized' and therefore be flagged for downsizing. Set to -1 to ignore CPU utilization
- *Freeable Memory Threshold (%)* - The freeable memory threshold at which to consider a cluster to be 'underutilized' and therefore be flagged for downsizing. Set to -1 to ignore memory utilization
- *Automatic Actions* - When this value is set, this policy will automatically take the selected action(s).

Please note that the "Automatic Actions" parameter contains a list of action(s) that can be performed on the resources. When it is selected, the policy will automatically execute the corresponding action on the data that failed the checks, post incident generation. Please leave this parameter blank for *manual* action.
For example if a user selects the "Downsize ElastiCache Nodes" action while applying the policy, the nodes of all underutilized ElastiCache clusters will be downsized.

## Policy Actions

- Sends an email notification
- Downsize nodes of underutilized ElastiCache clusters after approval

## Prerequisites

This Policy Template uses [Credentials](https://docs.flexera.com/flexera/EN/Automation/ManagingCredentialsExternal.htm) for authenticating to datasources -- in order to apply this policy you must have a Credential registered in the system that is compatible with this policy. If there are no Credentials listed when you apply the policy, please contact your Flexera Org Admin and ask them to register a Credential that is compatible with this policy. The information below should be consulted when creating the credential(s).

### Credential configuration

For administrators [creating and managing credentials](https://docs.flexera.com/flexera/EN/Automation/ManagingCredentialsExternal.htm) to use with this policy, the following information is needed:

- [**AWS Credential**](https://docs.flexera.com/flexera/EN/Automation/ProviderCredentials.htm#automationadmin_1982464505_1121575) (*provider=aws*) which has the following permissions:
- `sts:GetCallerIdentity`
- `cloudwatch:GetMetricData`
- `ec2:DescribeRegions`
- `elasticache:DescribeCacheClusters`
- `elasticache:ListTagsForResource`
- `elasticache:ModifyCacheCluster`*

\* Only required for taking action (terminating or downsizing); the policy will still function in a read-only capacity without these permissions.

Example IAM Permission Policy:

```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:GetCallerIdentity",
"cloudwatch:GetMetricData",
"ec2:DescribeRegions",
"elasticache:DescribeCacheClusters",
"elasticache:ListTagsForResource",
"elasticache:ModifyCacheCluster"
],
"Resource": "*"
}
]
}
```

- [**Flexera Credential**](https://docs.flexera.com/flexera/EN/Automation/ProviderCredentials.htm) (*provider=flexera*) which has the following roles:
- `billing_center_viewer`

The [Provider-Specific Credentials](https://docs.flexera.com/flexera/EN/Automation/ProviderCredentials.htm) page in the docs has detailed instructions for setting up Credentials for the most common providers.

## Supported Clouds

- AWS

## Cost

This policy template does not incur any cloud costs.
Loading

0 comments on commit 9c106c7

Please sign in to comment.