Elasticsearch Reserved Instance Lease Expiration In The
More Info:
Your AWS Elasticsearch Reserved Instances (RIs) should be renewed before expiration in order to get a significant discount on the hourly charges.
Risk Level
Low
Address
Cost Optimisation
Compliance Standards
- Cloudanix Best Practice
Triage and Remediation
- Remediation
Remediation
Using Console
To remediate the Elasticsearch Reserved Instance Lease Expiration in the next 7 Days issue in AWS, follow these steps:
-
Log in to the AWS Management Console.
-
Go to the Elasticsearch service.
-
Click on the "Reserved Instances" tab.
-
Look for the instance that has an expiration date in the next 7 days.
-
Click on the "Modify Reserved Instances" button.
-
Select the "Extend the reservation" option.
-
Choose the number of months to extend the reservation for.
-
Click on the "Purchase" button.
-
Review the details of the reservation extension and confirm the purchase.
-
Once the purchase is complete, the Elasticsearch Reserved Instance will be renewed and the expiration date will be extended.
-
Repeat the steps for any other Elasticsearch Reserved Instances that have an expiration date in the next 7 days.
By following these steps, you will be able to remediate the Elasticsearch Reserved Instance Lease Expiration in the next 7 Days issue in AWS.
Using CLI
To remediate the Elasticsearch Reserved Instance Lease Expiration in the next 7 days in AWS, follow these steps:
-
Open the AWS CLI on your local machine.
-
Check the Elasticsearch Reserved Instance Lease Expiration status by running the following command:
aws es describe-reserved-elasticsearch-instance-offerings --query 'ReservedElasticsearchInstanceOfferings[?Duration == `31536000` && FixedPrice == `0.0` && State == `ACTIVE` && UsagePrice == `0.0` && PaymentOption == `AllUpfront` && OfferingType == `HeavyUtilization` && DurationUnits == `Seconds` && ElasticsearchInstanceType == `m4.large.elasticsearch` && ReservedElasticsearchInstanceOfferingId != `null` && Start == `null` && End != `null` && End < `'"$(date -v+7d +%Y-%m-%dT%H:%M:%SZ)"'`]' --output tableThis command will list all Elasticsearch Reserved Instances with lease expiration in the next 7 days.
-
To remediate this issue, you need to renew the lease of the Elasticsearch Reserved Instances. To do this, run the following command:
aws es purchase-reserved-elasticsearch-instances-offering --reserved-elasticsearch-instance-offering-id <RESERVED_INSTANCE_ID> --instance-count <INSTANCE_COUNT> --payment-option AllUpfrontReplace
<RESERVED_INSTANCE_ID>with the ID of the Elasticsearch Reserved Instance that you want to renew, and<INSTANCE_COUNT>with the number of instances you want to reserve. This command will renew the lease of the Elasticsearch Reserved Instance for another year. -
Verify that the Elasticsearch Reserved Instance Lease Expiration status is updated by running the command in step 2 again.
-
Repeat steps 3-4 for any other Elasticsearch Reserved Instances that have lease expiration in the next 7 days.
By following these steps, you can remediate the Elasticsearch Reserved Instance Lease Expiration issue in AWS using AWS CLI.
Using Python
To remediate the Elasticsearch Reserved Instance Lease Expiration issue in AWS using Python, you can follow the below steps:
- Import the required AWS SDK libraries - Boto3 and Datetime.
import boto3
from datetime import datetime, timedelta
- Create a Boto3 client for Elasticsearch.
es_client = boto3.client('es')
- Get the list of Elasticsearch reserved instances.
reserved_instances = es_client.describe_reserved_elasticsearch_instances()['ReservedElasticsearchInstances']
- Iterate through the reserved instances and check if any of them are expiring in the next 7 days.
for instance in reserved_instances:
expiration_date = instance['EndTime']
days_left = (expiration_date - datetime.now()).days
if days_left <= 7:
# Remediation steps go here.
- If a reserved instance is expiring in the next 7 days, you can take remediation steps such as renewing the reservation or purchasing a new one. For example, to renew the reservation, you can use the
purchase_reserved_elasticsearch_instance_offeringmethod.
es_client.purchase_reserved_elasticsearch_instance_offering(
ReservedElasticsearchInstanceOfferingId='string',
ReservationName='string',
InstanceCount=123
)
- Once the remediation steps are completed, you can update your ticketing system or log the remediation in a file.
# Update ticketing system or log the remediation.
By following these steps, you can remediate the Elasticsearch Reserved Instance Lease Expiration issue in AWS using Python.
Using Terraform
Terraform cannot renew or purchase Amazon Elasticsearch/OpenSearch Reserved Instances; the AWS APIs for purchase-reserved-elasticsearch-instance-offering are not exposed via the hashicorp/aws provider, so there is no valid Terraform resource or argument for this operation.
You must perform this as a runtime/financial action via AWS CLI or console, following the exact steps in the verified remediation:
# 1. Inspect the expiring RI
aws es describe-reserved-elasticsearch-instances \
--reserved-elasticsearch-instance-id EXISTING_RESERVED_INSTANCE_ID \
--region AWS_REGION
# 2. List available offerings and select one that matches your needs
aws es describe-reserved-elasticsearch-instance-offerings \
--region AWS_REGION
# 3. Purchase (renew) a new Reserved Instance
aws es purchase-reserved-elasticsearch-instance-offering \
--region AWS_REGION \
--reserved-elasticsearch-instance-offering-id SELECTED_OFFERING_ID \
--reservation-name NEW_RESERVATION_NAME \
--instance-count EXISTING_INSTANCE_COUNT
Replace:
EXISTING_RESERVED_INSTANCE_IDwith the ID of the expiring RI.AWS_REGIONwith the RI’s region.SELECTED_OFFERING_IDwith an offering from step 2 that matches your instance type/term/payment option.NEW_RESERVATION_NAMEwith your desired name.EXISTING_INSTANCE_COUNTwith the current RI’s instance count.
Because Terraform cannot model or manage these RI purchases, terraform plan and terraform apply will show no changes related to Reserved Instances; verification must be done via the AWS console or aws es describe-reserved-elasticsearch-instances.