forked from gabanox/reto-2-python-generation
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstances_cli.py
More file actions
76 lines (69 loc) · 2.47 KB
/
instances_cli.py
File metadata and controls
76 lines (69 loc) · 2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# src/instances_cli.py
from botocore.exceptions import ClientError
import jmespath
def list_instances(ec2_client):
'''
Lista las instancias existentes y muestra información básica:
- ID de instancia
- Estado
- Tipo
- Zona de disponibilidad
'''
try:
response = ec2_client.describe_instances()
# Usamos JMESPath para extraer solo lo que nos interesa
instances = jmespath.search(
"Reservations[].Instances[][].{id: InstanceId, state: State.Name, type: InstanceType, az: Placement.AvailabilityZone}",
response
)
print("Instancias encontradas:")
for inst in instances:
print(f"- {inst['id']} | {inst['state']} | {inst['type']} | {inst['az']}")
except ClientError as e:
print("Error al listar instancias:", e)
def create_instance(ec2_client):
'''
Crea una instancia simple (por ejemplo, Amazon Linux 2 t2.micro).
Practicarás:
- Lectura de input()
- Validaciones básicas
- Manejo de excepciones
'''
print("Creación de instancia")
ami_id = input("Ingresa el AMI ID (ejemplo: ami-1234567890abcdef0): ").strip()
instance_type = input("Ingresa el tipo de instancia (ejemplo: t2.micro): ").strip()
if not ami_id or not instance_type:
print("AMI ID y tipo de instancia son obligatorios.")
return
try:
response = ec2_client.run_instances(
ImageId=ami_id,
InstanceType=instance_type,
MinCount=1,
MaxCount=1
)
instance_id = response["Instances"][0]["InstanceId"]
print(f"Instancia creada con ID: {instance_id}")
except ClientError as e:
print("Error al crear la instancia:", e)
def stop_instance(ec2_client):
'''
Detiene una instancia existente a partir de su ID.
Practicarás:
- Validación de que el ID no esté vacío
- Manejo de errores de AWS
'''
instance_id = input("Ingresa el ID de la instancia a detener: ").strip()
if not instance_id:
print("El ID de la instancia no puede estar vacío.")
return
try:
ec2_client.stop_instances(InstanceIds=[instance_id])
print(f"Solcitada detención de la instancia {instance_id}")
except ClientError as e:
print("Error al detener la instancia:", e)
# TODO: Implementar funciones similares:
# - start_instance(ec2_client)
# - reboot_instance(ec2_client)
# - terminate_instance(ec2_client)
# - filter_instances_by_state(ec2_client)