С помощью этого руководства вы сконфигурируете Managed Redis® как брокер сообщений, связав его с сервисами publisher и subscriber, работающими на виртуальной машине Ubuntu 22.04. Вы будете использовать виртуальную сеть VPC и подсети для связи виртуальной машины и сервиса Managed Redis®.
Вы будете использовать следующие сервисы:
Виртуальная машина — виртуальная машина в облаке для размещения приложений.
Managed Redis — хранилище данных в оперативной памяти для брокера сообщений.
Публичный IP-адрес — для доступа к сервису через интернет.
VPC сеть — изолированная виртуальная сеть для создания безопасной инфраструктуры.
Шаги:
Перед началом работы
-
Если вы уже зарегистрированы, войдите под своей учетной записью.
Разверните необходимые ресурсы в облаке
Создайте виртуальную сеть со следующими параметрами:
Название: pub-sub-VPC.
-
Название: pub-sub-subnet.
Адрес: 10.10.1.0/24.
VPC: pub-sub-VPC.
DNS-серверы : 8.8.8.8.
Убедитесь, что в личном кабинете на странице сервиса «VPC»:
отображается сеть pub-sub-VPC;
количество подсетей — 1;
подсеть pub-sub-subnet доступна.
Создайте виртуальную машину со следующими параметрами:
Название: pub-sub.
Образ: Публичные → Ubuntu 22.04.
Метод аутентификации: SSH-ключ и пароль.
SSH-ключ: ваш SSH-ключ.
Пароль: ваш пароль.
Имя хоста: pub-sub.
Подключить публичный IP: включено.
Тип IP-адреса: Прямой.
Группы безопасности: SSH-access_ru.AZ-1.
Подсеть: pub-sub-subnet.
Гарантированная доля vCPU: 10%.
vCPU: 1.
RAM: 1.
Убедитесь, что в личном кабинете на странице сервиса «Виртуальные машины» отображается виртуальная машина pub-sub в статуса «Запущена».
Создайте кластер Managed Redis со следующими параметрами:
Название кластера: pub-sub.
Версия Redis: v7.0.5.
vCPU: 2.
RAM: 4.
Подсеть: pub-sub-subnet.
Убедитесь, что в личном кабинете на странице сервиса «Managed Redis» отображается кластер pub-sub в статусе «Доступен».
Настройте окружение на виртуальной машине
Подключитесь к виртуальной машине pub-sub через серийную консоль по инструкции.
Активируйте сетевой интерфейс по инструкции:
sudo cloud-init cleansudo cloud-init initПодключитесь к виртуальной машине pub-sub по SSH по инструкции.
Обновите систему и установите необходимые пакеты:
sudo apt update && sudo apt upgrade -ysudo apt install -y python3 python3-venv python3-pip
Разработайте сервисы publisher и subscriber
Создайте директорию «pubsub» и перейдите в неё:
mkdir pubsubcd pubsubСоздайте файл publisher.py и вставьте в него следующий код:
nano publisher.pyСодержимое файла:
import argparseimport jsonimport osimport sysimport uuidfrom datetime import datetime, timezoneimport redisfrom dotenv import load_dotenvdef build_payload(message: str) -> str:"""Return JSON-encoded message with id and timestamp."""return json.dumps({"id": str(uuid.uuid4()),"timestamp": datetime.now(timezone.utc).isoformat(),"message": message,})def main() -> None:load_dotenv()parser = argparse.ArgumentParser(description="Publish a message to Redis.")parser.add_argument("message",nargs="?",help="Message text; if omitted you will be prompted.",)parser.add_argument("--channel",default=os.getenv("CHANNEL", "messages"),help="Redis Pub/Sub channel name (default: messages)",)args = parser.parse_args()msg_text = args.message or input("Enter your message: ")redis_url = os.getenv("REDIS_URL", "redis://localhost:6379/0")try:r = redis.from_url(redis_url)sent = r.publish(args.channel, build_payload(msg_text))except redis.ConnectionError as exc:print(f"Redis connection failed: {exc}", file=sys.stderr)sys.exit(1)print(f"Published to channel '{args.channel}' "f"(delivered to {sent} subscriber[s]).")if __name__ == "__main__":main()Создайте файл subscriber.py и вставьте в него следующий код:
nano subscriber.pyСодержимое файла:
import argparseimport jsonimport osimport sysimport redisfrom dotenv import load_dotenvdef pretty_print(raw: bytes) -> None:"""Attempt to pretty-print a JSON message; fall back to raw bytes."""try:obj = json.loads(raw)print(json.dumps(obj, indent=2))except json.JSONDecodeError:print(f"[non-JSON] {raw!r}")def main() -> None:load_dotenv()parser = argparse.ArgumentParser(description="Subscribe to a Redis channel.")parser.add_argument("--channel",default=os.getenv("CHANNEL", "messages"),help="Redis Pub/Sub channel name (default: messages)",)args = parser.parse_args()redis_url = os.getenv("REDIS_URL", "redis://localhost:6379/0")try:r = redis.from_url(redis_url)pubsub = r.pubsub(ignore_subscribe_messages=True)pubsub.subscribe(args.channel)except redis.ConnectionError as exc:print(f"Redis connection failed: {exc}", file=sys.stderr)sys.exit(1)print(f"Subscribed to '{args.channel}'. Waiting for messages… (Ctrl+C to quit)")try:for message in pubsub.listen():if message and message.get("type") == "message":pretty_print(message["data"])except KeyboardInterrupt:print("\nExiting subscriber.")if __name__ == "__main__":main()Создайте файл requirements.txt и вставьте следующее содержимое:
nano requirements.txtСодержимое файла:
redis==6.2.0python-dotenv==1.0.1Создайте файл .env и вставьте следующее содержимое:
nano .envСодержимое файла:
REDIS_URL=redis://:<REDIS_PASSWORD>@<REDIS_IP>:6379Где:
<REDIS_IP> — IP-адрес сервиса Managed Redis®.
<REDIS_PASSWORD> — пароль от кластера Managed Redis®.
IP-адрес и пароль можно найти на странице информации о кластере в блоке Данные для подключения.
Создайте и активируйте виртуальное окружение:
python3 -m venv venvsource venv/bin/activateУстановите зависимости:
pip install -r requirements.txt
Протестируйте работу очереди сообщений с Managed Redis®
Запустите сервис subscriber:
python subscriber.pyОткройте новое окно терминала, не закрывая текущий терминал.
Подключитесь к виртуальной машине pub-sub по SSH по инструкции.
Перейдите в директорию с сервисами:
cd pubsubАктивируйте виртуальное окружение:
source venv/bin/activateОтправьте сообщение в очередь:
python publisher.py "Hello from Ubuntu!"Переключитесь обратно на терминал 1 и проверьте, что сообщение успешно получено.

Удалите доступ по SSH для виртуальной машины
Так как для настроенного сервиса больше не требуется доступ по SSH, удалите доступ для повышения безопасности.
В личном кабинете перейдите в сервис «Виртуальные машины» и выберите машину pub-sub, созданную в шаге 1.
Перейдите в раздел Сетевые параметры.
Нажмите на Изменить группы безопасности для публичного IP-адреса.
Удалите группу «SSH-access_ru».
Нажмите Сохранить.
Попробуйте подключиться к виртуальной машине по SSH по инструкции и убедитесь, что доступ отсутствует.
Результат
Вы сконфигурировали Managed Redis® как брокер сообщений, связали его с сервисами publisher и subscriber, работающими на виртуальной машине. Вы получили опыт работы с очередями сообщений и безопасным доступом.
- Перед началом работы
- Разверните необходимые ресурсы в облаке
- Настройте окружение на виртуальной машине
- Разработайте сервисы publisher и subscriber
- Протестируйте работу очереди сообщений с Managed Redis®
- Удалите доступ по SSH для виртуальной машины
- Результат