Ошибка развертывания функции в лямбде с графеновым модулем - PullRequest
1 голос
/ 21 октября 2019

ошибка при выполнении функции в лямбда-AWS, в то время как локально нет ошибки. При выполнении кода в лямбда-AWS эта ошибка возникает, что я хочу, чтобы иметь возможность использовать graqpl длявыполнять запросы DynamodB и использовать их.

Попытка решения: удалить набор текста из виртуальной среды Python.

Произошла ошибка:

[ERROR] AttributeError: type object 'Callable' has no attribute '_abc_registry'
Traceback (most recent call last):
  File "/var/lang/lib/python3.7/imp.py", line 234, in load_module
    return load_source(name, filename, file)
  File "/var/lang/lib/python3.7/imp.py", line 171, in load_source
    module = _load(spec)
  File "<frozen importlib._bootstrap>", line 696, in _load
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/var/task/patron4.py", line 7, in <module>
    import graphene
  File "/tmp/sls-py-req/graphene/__init__.py", line 3, in <module>
    from .types import (
  File "/tmp/sls-py-req/graphene/types/__init__.py", line 2, in <module>
    from graphql import ResolveInfo
  File "/tmp/sls-py-req/graphql/__init__.py", line 27, in <module>
    from .graphql import graphql
  File "/tmp/sls-py-req/graphql/graphql.py", line 1, in <module>
    from .execution import ExecutionResult
  File "/tmp/sls-py-req/graphql/execution/__init__.py", line 21, in <module>
    from .executor import execute, subscribe
  File "/tmp/sls-py-req/graphql/execution/executor.py", line 14, in <module>
    from promise import Promise, promise_for_dict, is_thenable
  File "/tmp/sls-py-req/promise/__init__.py", line 18, in <module>
    from .promise import (
  File "/tmp/sls-py-req/promise/promise.py", line 8, in <module>
    from typing import (List, Any, Callable, Dict, Iterator, Optional, # flake8: noqa
  File "/tmp/sls-py-req/typing.py", line 1357, in <module>
    class Callable(extra=collections_abc.Callable, metaclass=CallableMeta):
  File "/tmp/sls-py-req/typing.py",enter code here line 1005, in __new__
    self._abc_registry = extra._abc_registry

Используемый код:

class User(Model):
  class Meta:
    table_name = 'patron2'
    region = 'us-east-2'
    host = 'https://dynamodb.us-east-2.amazonaws.com'
  id = UnicodeAttribute(hash_key=True, null=False)
  discipline = UnicodeAttribute(null=False)


class UserNode(PynamoObjectType):
  class Meta:
    model = User
    interfaces = (graphene.Node,)

class Query(graphene.ObjectType):
  users = graphene.List(UserNode)
  def resolve_users(self, args, context, info):
    return list(User.scan())

schema = graphene.Schema(query=Query)

def patrongrafico(event, context):
  # fetch all todos from the database
  try:
    print("hola")
    query = '''
        users {
          discipline
        }
      '''
    results = schema.execute(query)
    print(results)
  except Exception as ex:
    print(ex)
  return {'statusCode': 200,
    'body': json.dumps({'items': [dict(result) for result in results]})}

1 Ответ

0 голосов
/ 22 октября 2019

Поскольку вы используете Serverless Framework в сочетании с плагином serverless-python-needs, вы должны убедиться, что компактная упаковка отключена, поскольку это мешает некоторым библиотекам. По сути, некоторые библиотеки предполагают, что они установлены через «настоящий» менеджер пакетов, и в этом случае структура каталога и файлы выглядят немного иначе.

У меня была эта проблема с пакетом jsonschema несколько месяцев назад, и я написал об этом в сообщении в блоге , если вам интересно (Полное раскрытие: это блог моегоработодатель).

По существу ваш serverless.yml как раздел custom, который вы можете использовать, среди прочего, для настройки плагинов:

custom:
  pythonRequirements:
    slim: true

Параметр slim true эффективно удаляет некоторую информацию, которая не должнане нужно для большинства библиотек, но некоторые полагаются на это. Для получения информации об этом параметре см. Пакет docs .

Попробуйте еще раз с этой конфигурацией:

custom:
  pythonRequirements:
    slim: false
...