a method to assign (or reassign) an elastic ip to an instance on AWS
            
        :param ip_address: string with elastic ipv4 address on ec2  
        :param instance_id: string with aws id for running instance
        :return: dictioanry with response metadata fields

def assign_address(self, ip_address, instance_id):
        
        '''
            a method to assign (or reassign) an elastic ip to an instance on AWS
            
        :param ip_address: string with elastic ipv4 address on ec2  
        :param instance_id: string with aws id for running instance
        :return: dictioanry with response metadata fields
        '''
        
        title = '%s.assign_address' % self.__class__.__name__

    # validate inputs
        input_fields = {
            'ip_address': ip_address,
            'instance_id': instance_id
        }
        for key, value in input_fields.items():
            object_title = '%s(%s=%s)' % (title, key, str(value))
            self.fields.validate(value, '.%s' % key, object_title)

    # report query
        self.iam.printer('Assigning elastic ip address %s to instance %s.' % (ip_address, instance_id))

    # discover details associated with instance id
        try:
            response = self.connection.associate_address(
                InstanceId=instance_id,
                PublicIp=ip_address
            )
        except:
            raise AWSConnectionError(title)

        return response