Использование Managed Redis® как брокера сообщений
В этой лабораторной работе вы сконфигурируете 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.
-
Убедитесь, что в личном кабинете на странице сервиса «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®.
-
-
Создайте и активируйте виртуальное окружение:
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 для виртуальной машины
- Что дальше