Не удается получить доступ к экземпляру redis из python

#python #python-3.x #amazon-web-services #redis #elastic-cache

Вопрос:

Я создал экземпляр эластичного кэша с помощью redis, используя terraform. Это код, который я использовал:

 resource "aws_security_group" "main" {
  name        = "redis-security-group"
  description = "Controls access to the redis instance"
  vpc_id      = var.vpc_id

  ingress {
    protocol    = "-1"
    from_port   = 0
    to_port     = 0
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    protocol    = "-1"
    from_port   = 0
    to_port     = 0
    cidr_blocks = ["0.0.0.0/0"]
  }
}

resource "aws_elasticache_subnet_group" "main" {
  name       = "db-subnet-group"
  subnet_ids = var.public_subnets_ids
}

resource "aws_elasticache_cluster" "main" {
  cluster_id               = "redis-cluster"
  subnet_group_name        = aws_elasticache_subnet_group.main.name
  security_group_ids       = [aws_security_group.main.id]
  engine                   = "redis"
  node_type                = "cache.t3.small"
  num_cache_nodes          = 1
  parameter_group_name     = "default.redis6.x"
  snapshot_retention_limit = 0
  engine_version           = "6.x"
  port                     = 6379
}
 

Как вы можете видеть, я не определил какой-либо пароль (я не видел эту опцию в документации). Если я попытаюсь подключиться из правильно настроенного экземпляра EC2 (вы не сможете получить доступ к эластичному кэшу redis извне aws), Я могу прекрасно подключиться без указания пользователя/пароля.

Проблема возникает, когда мой веб-сервер пытается подключиться к нему, потому что я не указываю пароль. Я получаю следующую ошибку:

 redis.exceptions.ResponseError: AUTH <password> called without any password configured for the default user. Are you sure your configuration is correct?
 

Строка подключения без пароля отлично работает с redis-cli , но не с redis в python. Итак, я задаюсь вопросом о следующем:

  • Есть ли способ настроить пароль в моем экземпляре redis из сценария terraform/bash? Таким образом, я мог бы нормально использовать его с моего веб-сервера python.
  • Есть ли способ настроить python redis так, чтобы пароль не требовался?

Комментарии:

1. Добавьте свой код python, который вы пробовали до сих пор. возможно, есть проблема со строкой подключения

2. Как вы подключаетесь к нему с Python? «Без пароля» должно быть по умолчанию, если вы не используете какую-либо структуру, которая делает предположения?

3. Я использую модуль django redis, поэтому мне действительно не нужно ничего настраивать. Если я использую экземпляр redis с настройкой пароля, он работает (я пытаюсь перейти от дополнения redis на heroku к эластичному кэшу на aws).

4. Это шаблон строки подключения, который я использую: ‘redis://:{пароль}@{конечная точка}/0’, где пароль-пустая строка, а конечная точка-конечная точка из aws.

5. Я считаю, что вам следует изменить шаблон строки подключения на 'redis://{endpoint}/0' . Это @ запускает проверку подлинности по паролю, даже если пароль, который вы передаете, пуст.