It looks like a duplicate of old issue https://github.com/localstack/localstack/issues/78
But now it's reproducible for me with the latest version of LocalStack. 
prefix = 'MessageAttribute'
        names = []
        for (k, name) in [(k, data[k]) for k in data if k.startswith(prefix) and k.endswith('.Name')]:
            attr_name = name[0]
            k_id = k.split('.')[1]
            names.append((attr_name, k_id))
        msg_attrs = {}
        for (key_name, key_id) in names:
            msg_attrs[key_name] = {}
            
            attrs = [(k, data[k]) for k in data
                if k.startswith('{}.{}.'.format(prefix, key_id)) and not k.endswith('.Name')]
            for (attr_k, attr_v) in attrs:
                attr_name = attr_k.split('.')[3]
                msg_attrs[key_name][attr_name[0].lower() + attr_name[1:]] = attr_v[0]
            
            
            
            msg_attrs[key_name]['stringListValues'] = []
            msg_attrs[key_name]['binaryListValues'] = []
        return msg_attrs
    
    
    
    
    
    def _format_attributes(self, req_data):