#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'
. Это@
запускает проверку подлинности по паролю, даже если пароль, который вы передаете, пуст.