Feb-27-2019, 04:49 PM
Hello,
I am trying to create a program that takes a list of AWS instance IDs from user input. And then prints out information about those instances, and then deletes them. I'm not having much progress so I was hoping to get some help!
I am using python 3.7 and boto3.
When I run the program this is the error I get:
This is the working program I am basing my new one on:
I am trying to create a program that takes a list of AWS instance IDs from user input. And then prints out information about those instances, and then deletes them. I'm not having much progress so I was hoping to get some help!
I am using python 3.7 and boto3.
When I run the program this is the error I get:
Error:python3 .\aws_ec2_terminate_instances.py
Enter an instance ID separated by commas: i-024d1b8e8eaa8e417,i-03804b280877175be
Deleting Instance IDs:
i-024d1b8e8eaa8e417
Traceback (most recent call last):
File ".\aws_ec2_terminate_instances.py", line 15, in <module>
instance = ec2.describe_instances(InstanceIds=[instance_id])
AttributeError: 'ec2.ServiceResource' object has no attribute 'describe_instances'
This is the script as I have it so far:import sys import boto3 import collections from collections import defaultdict ec2 = boto3.resource('ec2') instance_id_list = input("Enter an instance ID separated by commas: ") instance_ids = instance_id_list.split(",") print("Deleting Instance IDs:") for instance_id in instance_ids: print(instance_id) instance = ec2.describe_instances(InstanceIds=[instance_id]) ec2info = defaultdict() for tag in instance.tags: if 'Name'in tag['Key']: print(tag['Key']) name = tag['Value'] # Add instance info to a dictionary \ print(instance.get('Instances')) ec2info[instance.id] = { 'Instance ID': instance.id, 'Type': instance.instance_type, 'State': instance.state['Name'], 'Private IP': instance.private_ip_address, 'Public IP': instance.public_ip_address, 'Launch Time': instance.launch_time } attributes = ['Instance ID', 'Type', 'State', 'Private IP', 'Public IP', 'Launch Time'] for instance_id, instance in ec2info.items(): for key in attributes: print("{0}: {1}".format(key, instance[key])) print("------") ec2.instances.filter(InstanceIds=instance).stop() ec2.instances.filter(InstanceIds=instance).terminate()I am basing this program on an earlier one that I have that gets a list of ALL AWS instances in an account, and prints out information about them. But instead of printing out everything, my goal is to get a list of instance IDs from the user, and then just print info about those instances and then delete them.
This is the working program I am basing my new one on:
from collections import defaultdict import boto3 """ A tool for retrieving basic information from the running EC2 instances. """ # Connect to EC2 ec2 = boto3.resource('ec2') # Get information for all running instances running_instances = ec2.instances.filter(Filters=[{ 'Name': 'instance-state-name', 'Values': ['running']}]) ec2info = defaultdict() for instance in running_instances: for tag in instance.tags: if 'Name'in tag['Key']: print(tag['Key']) name = tag['Value'] # Add instance info to a dictionary ec2info[instance.id] = { 'Name': name, 'Instance ID': instance.id, 'Type': instance.instance_type, 'State': instance.state['Name'], 'Private IP': instance.private_ip_address, 'Public IP': instance.public_ip_address, 'Launch Time': instance.launch_time } attributes = ['Name', 'Instance ID', 'Type', 'State', 'Private IP', 'Public IP', 'Launch Time'] for instance_id, instance in ec2info.items(): for key in attributes: print("{0}: {1}".format(key, instance[key])) print("------")Here's a sample of the output from the working program:
------ Name: usawscdvs00000-admin Instance ID: i-84c1de8a Type: t2.medium State: running Private IP: 10.48.128.41 Public IP: None Launch Time: 2019-02-26 18:42:34+00:00 ------ Name: app1-csr1kv-d Instance ID: i-0a90f4ba Type: c3.xlarge State: running Private IP: 10.48.168.4 Public IP: 52.22.62.126 Launch Time: 2017-12-20 19:21:45+00:00 ------I need some help getting the first program to do what I'm asking. I am very new to python and appreciate any help I can get!