Python Forum
AttributeError: 'ec2.ServiceResource' object has no attribute 'describe_instances'
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
AttributeError: 'ec2.ServiceResource' object has no attribute 'describe_instances'
#1
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:

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!
Reply
#2
I forgot to print the instance name tag in my original post. Here is my current error:
Error:
AttributeError: 'dict' object has no attribute 'tags'
Here is the current state of my code:
import sys
import boto3
import collections
from collections import defaultdict
ec2 = boto3.client('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:
    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] = {
        '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(instance.terminate())
        print("------")
How can I get passed this error?
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  getpass.getpass() results in AttributeError: module 'os' has no attribute 'O_NOCTTY' EarthAndMoon 4 755 Oct-03-2023, 02:00 PM
Last Post: deanhystad
  AttributeError: '_tkinter.tkapp' object has no attribute 'username' Konstantin23 4 1,656 Aug-04-2023, 12:41 PM
Last Post: Konstantin23
  Python: Regex is not good for re.search (AttributeError: 'NoneType' object has no att Melcu54 9 1,460 Jun-28-2023, 11:13 AM
Last Post: Melcu54
  Parallel processing - AttributeError: Can't get attribute 'sktimekmeans' Mohana1983 1 738 Jun-22-2023, 02:33 AM
Last Post: woooee
  Python: AttributeError: 'PageObject' object has no attribute 'extract_images' Melcu54 2 3,842 Jun-18-2023, 07:47 PM
Last Post: Melcu54
  Object attribute behavior different in 2 scripts db042190 1 726 Jun-14-2023, 12:37 PM
Last Post: deanhystad
  cx_oracle Error - AttributeError: 'function' object has no attribute 'cursor' birajdarmm 1 2,298 Apr-15-2023, 05:17 PM
Last Post: deanhystad
  Pandas AttributeError: 'DataFrame' object has no attribute 'concat' Sameer33 5 5,546 Feb-17-2023, 06:01 PM
Last Post: Sameer33
  WebDriver' object has no attribute 'find_element_by_css_selector rickadams 3 5,883 Sep-19-2022, 06:11 PM
Last Post: Larz60+
  'dict_items' object has no attribute 'sort' Calli 6 4,447 Jul-29-2022, 09:19 PM
Last Post: Gribouillis

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020