From a861b3c45a98af34aa2fa875f87bd17397c3090a Mon Sep 17 00:00:00 2001 From: mike dupont Date: Fri, 13 Dec 2024 14:02:37 -0500 Subject: [PATCH] terminate spot instances as well --- api/terminate.py | 30 ++++++++++++++++++++++++++++++ api/terminate.sh | 2 +- api/terminate_spots.py | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 api/terminate.py create mode 100644 api/terminate_spots.py diff --git a/api/terminate.py b/api/terminate.py new file mode 100644 index 00000000..5df0de57 --- /dev/null +++ b/api/terminate.py @@ -0,0 +1,30 @@ +#!/bin/python3 +# rewrite this to aslo cancel-spot-instance-requests + +import boto3 + +# Create an EC2 client +ec2_client = boto3.client('ec2') + +# Retrieve instance IDs +response = ec2_client.describe_instances() + + +for reservation in response['Reservations'] : + for instance in reservation['Instances']: + print( instance) + +instance_ids = [instance['InstanceId'] + for reservation in response['Reservations'] + for instance in reservation['Instances']] + +# Terminate instances +for instance_id in instance_ids: + print(f"Terminating instance: {instance_id}") + ec2_client.terminate_instances(InstanceIds=[instance_id]) + +# Check the status of the terminated instances +terminated_instances = ec2_client.describe_instances(InstanceIds=instance_ids) +for reservation in terminated_instances['Reservations']: + for instance in reservation['Instances']: + print(f"Instance ID: {instance['InstanceId']}, State: {instance['State']['Name']}") diff --git a/api/terminate.sh b/api/terminate.sh index 0fddefd5..a3f5209d 100644 --- a/api/terminate.sh +++ b/api/terminate.sh @@ -2,6 +2,6 @@ instance_ids=$(aws ec2 describe-instances --query "Reservations[*].Instances[*].InstanceId" --output text) for instance_id in $instance_ids; do - echo "Starting session for instance: $instance_id" + echo "terminate instance: $instance_id" aws ec2 terminate-instances --instance-ids "$instance_id" done diff --git a/api/terminate_spots.py b/api/terminate_spots.py new file mode 100644 index 00000000..c64659ff --- /dev/null +++ b/api/terminate_spots.py @@ -0,0 +1,34 @@ +#!/bin/python3 + +import boto3 + +# Create an EC2 client +ec2_client = boto3.client('ec2') + +# Retrieve instance IDs and Spot Instance Request IDs +response = ec2_client.describe_instances() +instance_ids = [] +spot_request_ids = [] + +for reservation in response['Reservations']: + for instance in reservation['Instances']: + print(instance) + instance_ids.append(instance['InstanceId']) + if 'SpotInstanceRequestId' in instance: + spot_request_ids.append(instance['SpotInstanceRequestId']) + +# Terminate instances +for instance_id in instance_ids: + print(f"Terminating instance: {instance_id}") + ec2_client.terminate_instances(InstanceIds=[instance_id]) + +# Cancel Spot Instance Requests +for spot_request_id in spot_request_ids: + print(f"Cancelling Spot Instance Request: {spot_request_id}") + ec2_client.cancel_spot_instance_requests(SpotInstanceRequestIds=[spot_request_id]) + +# Check the status of the terminated instances +terminated_instances = ec2_client.describe_instances(InstanceIds=instance_ids) +for reservation in terminated_instances['Reservations']: + for instance in reservation['Instances']: + print(f"Instance ID: {instance['InstanceId']}, State: {instance['State']['Name']}")