Python 3 Boto Unable to parse pagination error
MRAB
python at mrabarnett.plus.com
Wed Feb 27 14:11:44 EST 2019
On 2019-02-26 20:06, Tim Dunphy wrote:
> Hi all,
>
> I'm trying to create a python 3 script that takes a list of AWS instance
> IDs. It then prints out some information about the instances and then
> terminates them.
>
> I am very new to python, so still working through some basic issues.
>
> This is the error I get when I run the script:
>
> python3 .\aws_ec2_termiante_instances.py
> Enter an instance ID separated by commas:
> i-0463897140af217f8,i-0634fc5fa453462fb
> enter code here
> Deleting Instance IDs:
> i-0463897140af217f8
> i-0634fc5fa453462fb
> Traceback (most recent call last):
> File ".\aws_ec2_termiante_instances.py", line 37, in <module>
> NextToken='string'
> File
> "C:\Users\tdunphy\AppData\Local\Programs\Python\Python37-32\lib\site-packages\botocore\client.py",
> line 357, in _api_call
> return self._make_api_call(operation_name, kwargs)
> File
> "C:\Users\tdunphy\AppData\Local\Programs\Python\Python37-32\lib\site-packages\botocore\client.py",
> line 661, in _make_api_call
> raise error_class(parsed_response, operation_name)
> botocore.exceptions.ClientError: An error occurred
> (InvalidParameterValue) when calling the DescribeInstances operation:
> Unable to parse pagination token
>
> This is my script that produces the above output:
>
> from collections import defaultdict
> import boto3
> # Connect to EC2
> ec2 = boto3.client('ec2')
>
> instance_id_list = input("Enter an instance ID separated by commas: ")
> instance_ids_text = instance_id_list.split(",")
instance_id_list is a string and instance_ids_text is a list of strings,
so the names are somewhat misleading.
> print("Deleting Instance IDs:")
> for instance_id in instance_ids_text:
> print(instance_id)
>
> ec2info = defaultdict()
> for instance_id in instance_ids_text:
> instance = ec2.describe_instances(
> Filters=[
> {
> 'Name': 'string',
> 'Values': [
> 'string',
> ]
> },
> ],
> InstanceIds=[
> 'instance_id',
Shouldn't this be the actual id, not the string 'instance_id'?
> ],
> MaxResults=123,
> NextToken='string'
> )
> for tag in instance.tags:
> if 'Name'in 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("------")
> ec2.instances.filter(InstanceIds=instance.id).stop()
> ec2.instances.filter(InstanceIds=instance.id).terminate()
>
> To recap, what I would like to do is give the script a list of instance
> IDs, print out the list of instance IDs, then print some info about those
> instances. Then terminate them.
>
> How can I get past this error and produce that result?
>
More information about the Python-list
mailing list