У меня есть два экземпляра Ubuntu EC2, на которых запущен Scrapy, оба используют scrapy-redis для управления дублированием. Я пытаюсь использовать ElastiCache Redis в качестве хранилища scrapy-redis. У меня точно такая же настройка в другой учетной записи AWS, и она отлично работает. Я пытаюсь воспроизвести настройку в новой учетной записи, но это не сработает. Два экземпляра EC2 и экземпляр ElastiCache находятся в одном VPC, и я следил за Эта статья для разрешения доступа группы безопасности из экземпляров Scrapy к ElastiCache. Вы можете увидеть настройку ниже:
Экземпляр ElastiCache находится в выбранной группе безопасности; две другие группы - это два экземпляра Scrapy EC2.
Проблема изолирована от scrapy-redis, потому что я могу использовать ssh в обоих окнах Scrapy и без проблем подключиться к экземпляру ElastiCache с помощью redis-cli. У меня есть правильные настройки для scrapy-redis в моем файле settings.py, например:
REDIS_HOST = 'redis.xxxx.ng.0001.use2.cache.amazonaws.com'
REDIS_PORT = 6379
Ошибка, которую я получаю от scrapy-redis,
File "/usr/local/lib/python3.5/dist-packages/redis/connection.py", line 486, in connect
raise TimeoutError("Timeout connecting to server")
redis.exceptions.TimeoutError: Timeout connecting to server
Я хватаюсь за соломинку здесь, но я создал свои экземпляры Scrapy из AMI, который я создал в исходной учетной записи, где настройка работает правильно, так что, может быть, проблема в этом? Любая помощь будет оценена.
Я недостаточно силен в Python, чтобы точно понять, почему, но мы поняли, что проблема связана с тем, в каком каталоге мы находились при запуске ScrapyD. Очевидно, вам нужно находиться в том же каталоге, что и settings.py, а не выше или ниже, когда вы запускаете ScrapyD, иначе соединения Redis не распознаются. Это решает проблему, но если кто-нибудь знает причину, не стесняйтесь добавлять.