Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Практические руководства
  • Веб-сервис
    • Все руководства
    • Статический сайт в Object Storage
    • Сайт на LAMP- или LEMP-стеке
    • Отказоустойчивый сайт с балансировкой нагрузки через Network Load Balancer
    • Отказоустойчивый сайт с балансировкой нагрузки через Application Load Balancer
    • Сайт на базе Joomla с БД PostgreSQL
    • Сайт на WordPress
    • Сайт на WordPress с БД MySQL
    • Перенос WordPress сайта с хостинга в Yandex Cloud
    • Веб-сайт на базе 1С-Битрикс
    • Организация виртуального хостинга
    • Создание балансировщика с защитой от DDoS
    • Публикация обновлений для игр
    • Интеграция L7-балансировщика с Cloud CDN и Object Storage
    • Сине-зеленое и канареечное развертывание версий сервиса
    • Терминирование TLS-соединений
  • Интернет-магазины
    • Все руководства
    • Интернет-магазин на 1С-Битрикс
    • Интернет-магазин на Opencart
  • Архив данных
    • Все руководства
    • Однонодовый файловый сервер
    • Настройка SFTP-сервера на Centos 7
    • Резервное копирование в Object Storage через Acronis
    • Резервное копирование в Object Storage с помощью CloudBerry Desktop Backup
    • Резервное копирование в Object Storage через Duplicati
    • Резервное копирование в Object Storage с помощью Bacula
    • Резервное копирование в Object Storage с помощью Veritas Backup Exec
    • Распознавание архива изображений в Yandex Vision
  • Тестовая среда
    • Все руководства
    • Тестирование приложений с помощью GitLab
    • Создание тестовых ВМ через GitLab CI
    • Высокопроизводительные вычисления на прерываемых виртуальных машинах
    • Эмуляция множества IoT-устройств
    • Нагрузочное тестирование gRPC-сервиса
    • Развертывание и нагрузочное тестирование gRPC-сервиса с масштабированием
    • HTTPS-тест с постоянной нагрузкой с помощью Phantom
    • HTTPS-тест со ступенчатой нагрузкой с помощью Pandora
    • Нагрузочное тестирование с нескольких агентов
  • Управление инфраструктурой
    • Все руководства
    • Начало работы с Terraform
    • Загрузка состояний Terraform в Object Storage
    • Начало работы с Packer
    • Сборка образа ВМ с набором инфраструктурных инструментов с помощью Packer
    • Автоматизация сборки образов ВМ с помощью Jenkins
    • Непрерывное развертывание контейнеризованных приложений с помощью GitLab
    • Создание кластера Linux-серверов «1С:Предприятия» с кластером Managed Service for PostgreSQL
    • Миграция в Yandex Cloud с помощью Hystax Acura
    • Защита от сбоев с помощью Hystax Acura
    • Настройка синхронизации времени NTP
    • Работа с группой ВМ с автоматическим масштабированием
    • Автомасштабирование группы ВМ по расписанию
    • Автомасштабирование группы ВМ для обработки сообщений из очереди
    • Обновление группы ВМ под нагрузкой
    • Передача логов с ВМ в Yandex Cloud Logging
    • Резервное копирование ВМ с помощью Hystax Acura Backup
    • Настройка отказоустойчивой архитектуры в Yandex Cloud
    • Создание SAP-программы в Yandex Cloud
    • Настройка локального кеширующего DNS-резолвера
    • Миграция DNS-зон из Яндекс 360
    • Интеграция с корпоративным сервисом DNS
    • Создание веб-хука резолвера ACME для ответов на DNS01-проверки
    • Запись логов балансировщика в PostgreSQL
    • Создание триггера для бюджетов, который вызывает функцию для остановки ВМ
  • Построение Data Platform
    • Все руководства
    • Миграция базы данных из стороннего кластера Apache Kafka® в Yandex Managed Service for Apache Kafka®
    • Поставка данных из Yandex Managed Service for MySQL в Yandex Managed Service for Apache Kafka® с помощью Yandex Data Transfer
    • Поставка данных из Yandex Managed Service for PostgreSQL в Yandex Managed Service for Apache Kafka® с помощью Yandex Data Transfer
    • Поставка данных из Yandex Managed Service for Apache Kafka® в Yandex Managed Service for ClickHouse с помощью Yandex Data Transfer
    • Перенос данных между кластерами Yandex Managed Service for Apache Kafka® с помощью Yandex Data Transfer
    • Поставка данных из Yandex Managed Service for Apache Kafka® в Yandex Managed Service for YDB с помощью Yandex Data Transfer
    • Поставка данных из Yandex Managed Service for MySQL в Yandex Managed Service for Apache Kafka® с помощью Debezium
    • Поставка данных из Yandex Managed Service for PostgreSQL в Yandex Managed Service for Apache Kafka® с помощью Debezium
    • Настройка Kafka Connect для работы с кластером Yandex Managed Service for Apache Kafka®
    • Управление схемами данных в Yandex Managed Service for Apache Kafka®
    • Использование Managed Schema Registry с Yandex Managed Service for Apache Kafka®
    • Использование Confluent Schema Registry с Yandex Managed Service for Apache Kafka®
    • Миграция базы данных из MySQL в ClickHouse с помощью Yandex Data Transfer
    • Асинхронная репликация данных из PostgreSQL в ClickHouse
    • Обмен данными между Yandex Managed Service for ClickHouse и Yandex Data Proc
    • Настройка Yandex Managed Service for ClickHouse для Graphite
    • Получение данных из Yandex Managed Service for Apache Kafka® в Yandex Managed Service for ClickHouse
    • Получение данных из RabbitMQ в Yandex Managed Service for ClickHouse
    • Сохранение потока данных Yandex Data Streams в Yandex Managed Service for ClickHouse
    • Использование гибридного хранилища в Yandex Managed Service for ClickHouse
    • Шардирование таблиц Yandex Managed Service for ClickHouse
    • Настройка Yandex Cloud DNS для доступа к кластерам управляемых баз данных из других облачных сетей
    • Настройка Yandex Cloud DNS для доступа к кластеру Yandex Managed Service for ClickHouse из других облачных сетей
    • Импорт данных из Yandex Managed Service for MySQL в Yandex Data Proc с помощью Sqoop
    • Импорт данных из Yandex Managed Service for PostgreSQL в Yandex Data Proc с помощью Sqoop
    • Использование скриптов инициализации для настройки GeeseFS в Yandex Data Proc
    • Миграция данных из стороннего кластера Elasticsearch в Yandex Managed Service for Elasticsearch с помощью Reindex API
    • Миграция коллекций из стороннего кластера MongoDB в Yandex Managed Service for MongoDB
    • Миграция данных в Yandex Managed Service for MongoDB
    • Шардирование коллекций MongoDB
    • Анализ производительности и оптимизация MongoDB
    • Миграция базы данных из стороннего кластера MySQL в кластер Yandex Managed Service for MySQL
    • Анализ производительности и оптимизация Managed Service for MySQL
    • Синхронизация данных из стороннего кластера MySQL в Yandex Managed Service for MySQL с помощью Yandex Data Transfer
    • Миграция базы данных из Yandex Managed Service for MySQL в сторонний кластер MySQL
    • Миграция базы данных из Yandex Managed Service for MySQL в Yandex Managed Service for YDB с помощью Yandex Data Transfer
    • Миграция базы данных из Yandex Managed Service for MySQL в Yandex Object Storage с помощью Yandex Data Transfer
    • Создание кластера PostgreSQL для 1С
    • Анализ производительности и оптимизация Managed Service for PostgreSQL
    • Миграция базы данных из стороннего кластера PostgreSQL в кластер Yandex Managed Service for PostgreSQL
    • Миграция базы данных из Managed Service for PostgreSQL
    • Поставка данных из Yandex Managed Service for PostgreSQL в Yandex Managed Service for YDB с помощью Yandex Data Transfer
    • Миграция базы данных из Yandex Managed Service for PostgreSQL в Yandex Object Storage
    • Миграция базы данных из Greenplum® в ClickHouse
    • Миграция базы данных из Greenplum® в PostgreSQL
    • Миграция базы данных из стороннего кластера Redis в Yandex Managed Service for Redis
    • Использование кластера Managed Service for Redis в качестве хранилища сессий PHP
  • Продукты Microsoft в Yandex Cloud
    • Все руководства
    • Развертывание Active Directory
    • Развертывание Microsoft Exchange
    • Развертывание Remote Desktop Services
    • Развертывание группы доступности Always On с внутренним сетевым балансировщиком
    • Развертывание Remote Desktop Gateway
  • Сетевая инфраструктура
    • Все руководства
    • Архитектура и защита базового интернет-сервиса
    • Настройки DHCP для работы с корпоративным DNS-сервером
    • Маршрутизация с помощью NAT-инстанса
    • Создание туннеля IPSec VPN
    • Установка виртуального роутера Cisco CSR 1000v
    • Установка виртуального роутера Mikrotik CHR
    • Соединение с облачной сетью при помощи OpenVPN
    • Создание и настройка шлюза UserGate в режиме прокси-сервера
    • Создание и настройка шлюза UserGate в режиме межсетевого экрана
    • Настройка сети для Yandex Data Proc
  • Визуализация и анализ данных
    • Все руководства
    • Визуализация данных из CSV-файла
    • Создание и публикация диаграммы с картой Москвы из CSV-файла
    • Анализ продаж сети магазинов из БД ClickHouse
    • Анализ открытых данных ДТП на дорогах России
    • Анализ продаж и локаций пиццерий на данных из БД ClickHouse и Marketplace
    • Веб-аналитика с подключением к Яндекс Метрике
    • Веб-аналитика с расчетом воронок и когорт на данных Яндекс Метрики
    • Аналитика мобильного приложения на данных AppMetrica
    • Анализ статистики подкастов Яндекс Музыки (для авторов подкастов)
    • Визуализация данных с помощью SQL-чарта
    • Анализ customer journey мобильного приложения на данных AppMetrica
    • Анализ логов Object Storage при помощи DataLens
  • Интернет вещей
    • Руководства по работе с интернетом вещей
    • Мониторинг состояния географически распределенных устройств
    • Мониторинг показаний датчиков и уведомления о событиях
  • Бессерверные технологии
    • Сокращатель ссылок
    • Ввод данных в системы хранения
    • Хранение журналов работы приложения
    • Развертывание веб-приложения с использованием Java Servlet API
    • Разработка Slack-бота
    • Разработка Telegram-бота
    • Разработка пользовательской интеграции в API Gateway
    • Разработка CRUD API для сервиса фильмов
    • Разработка навыка Алисы и сайта с авторизацией
  1. Управление инфраструктурой
  2. Автомасштабирование группы ВМ для обработки сообщений из очереди

Автоматическое масштабирование группы виртуальных машин для обработки сообщений из очереди Yandex Message Queue

Статья создана
Yandex Cloud
  • Перед началом работы
    • Необходимые платные ресурсы
  • Подготовьте окружение
    • Создайте вспомогательные ресурсы Yandex Cloud
    • Настройте AWS CLI
  • Создайте очередь в Message Queue
  • Создайте образ с приложением
  • Создайте группу виртуальных машин
  • Проверьте масштабирование группы виртуальных машин
  • Удалите созданные ресурсы

Сценарий описывает интеграцию между сервисами Yandex Compute Cloud, Yandex Message Queue и Yandex Monitoring.

В сценарии создается группа виртуальных машин. Все ВМ в группе обрабатывают сообщения из одной очереди Message Queue (для примера — получают их и через некоторое время удаляют). Количество сообщений в очереди записывается в метрику Yandex Monitoring, и группа ВМ автоматически масштабируется по этой метрике.

Для масштабирования выбрана деликатная стратегия остановки: ВМ останавливаются самостоятельно после обработки всех сообщений и только после этого удаляются из группы при уменьшении ее размера. Это гарантирует, что ВМ не будут удалены принудительно и обработают последние сообщения, даже если очередь опустеет до конца обработки.

Чтобы выполнить сценарий:

  1. Подготовьте окружение.
  2. Создайте очередь в Message Queue.
  3. Создайте образ с приложением.
  4. Создайте группу виртуальных машин.
  5. Проверьте масштабирование группы виртуальных машин.

Если созданные ресурсы вам больше не нужны, удалите их.

Перед началом работы

Перед работой нужно зарегистрироваться в Yandex Cloud и создать платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь, если вы еще не зарегистрированы.
  2. На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

В качестве примера в сценарии будет использоваться каталог с именем example-folder.

Необходимые платные ресурсы

В стоимость инфраструктуры входят:

  • плата за использование виртуальных машин и хранение образа (см. тарифы Compute Cloud);
  • плата за использование публичных IP-адресов и исходящий трафик с ВМ (см. тарифы Virtual Private Cloud);
  • плата за запросы к очереди (см. тарифы Message Queue).

Подготовьте окружение

Создайте вспомогательные ресурсы Yandex Cloud

Консоль управления
CLI
API
  1. Создайте сервисный аккаунт queue-autoscale-sa и назначьте ему роль editor в каталоге example-folder:

    1. В консоли управления выберите каталог example-folder.
    2. Перейдите на вкладку Сервисные аккаунты и нажмите кнопку Создать сервисный аккаунт.
    3. Укажите Имя сервисного аккаунта: queue-autoscale-sa.
    4. Нажмите Добавить роль и выберите роль editor.
    5. Нажмите кнопку Создать.
  2. Создайте статический ключ доступа для работы сервисного аккаунта с Message Queue и сохраните его в файл access_key:

    1. В списке сервисных аккаунтов выберите queue-autoscale-sa.

    2. Нажмите кнопку Создать новый ключ.

    3. Выберите пункт Создать статический ключ доступа.

    4. Укажите Описание ключа: Message Queue.

    5. Нажмите кнопку Создать.

    6. Вставьте идентификатор ключа и секретный ключ в файл access_key в следующем формате:

      access_key:
        key_id: <идентификатор ключа>
      secret: <секретный ключ>
      
  3. Создайте облачную сеть queue-autoscale-network:

    1. В консоли управления выберите каталог example-folder.
    2. В списке сервисов выберите Virtual Private Cloud.
    3. Нажмите кнопку Создать сеть.
    4. Укажите Имя сети: queue-autoscale-network.
    5. Отключите опцию Создать подсети.
    6. Нажмите кнопку Создать сеть.
  4. Создайте подсеть queue-autoscale-subnet-a в зоне ru-central1-a:

    1. В списке сетей выберите queue-autoscale-network.

    2. Нажмите кнопку Добавить подсеть.

    3. Укажите параметры подсети:

      • Имя — queue-autoscale-subnet-a.
      • Зона — ru-central1-a.
      • CIDR — 192.168.1.0/24.
    4. Нажмите кнопку Создать подсеть.

  1. Создайте сервисный аккаунт queue-autoscale-sa:

    yc iam service-account create --name queue-autoscale-sa
    

    Где --name — имя сервисного аккаунта: queue-autoscale-sa.

    Результат:

    id: aje6brh817ro8o6vo6tv
    folder_id: b0g12ga82bcv0cdeferg
    created_at: "2021-10-04T16:19:10.153346507Z"
    name: queue-autoscale-sa
    
  2. Назначьте сервисному аккаунту роль editor в каталоге example-folder:

    yc resource-manager folder add-access-binding example-folder \
      --service-account-name queue-autoscale-sa \
      --role editor
    

    Где:

    • --service-account-name — имя сервисного аккаунта, созданного на шаге 1: queue-autoscale-sa.
    • --role — назначаемая роль: editor.

    Результат:

    done (1s)
    
  3. Создайте статический ключ доступа для работы сервисного аккаунта с Message Queue и сохраните его в файл access_key:

    yc iam access-key create \
      --service-account-name queue-autoscale-sa \
      --description "Message Queue" \
    | tee access_key
    

    Где:

    • --service-account-name — имя сервисного аккаунта, созданного на шаге 1: queue-autoscale-sa.
    • --description — описание ключа.

    Результат:

    access_key:
      id: ajevb6bx51w3wnep9clq
      service_account_id: aje6brh817ro8o6vo6tv
      created_at: "2021-10-04T16:25:19.143847764Z"
      description: Message Queue
      key_id: g3VybpVKdq_YiFEmDIht
    secret: WVUqnwmC4LSUep0GTKGkbcht9K3Xav7VSOeD_mRG
    
  4. Создайте облачную сеть queue-autoscale-network:

    yc vpc network create queue-autoscale-network
    

    Результат:

    id: enpabce123hde4ft1r3t
    folder_id: b0g12ga82bcv0cdeferg
    created_at: "2021-10-04T16:28:15.905337847Z"
    name: queue-autoscale-network
    
  5. Создайте подсеть queue-autoscale-subnet-a в зоне ru-central1-a:

    yc vpc subnet create queue-autoscale-subnet-a \
      --network-name queue-autoscale-network 
      --range 192.168.1.0/24 
      --zone ru-central1-a
    

    Где:

    • --network-name — имя сети, в которой создается подсеть: queue-autoscale-network.
    • --range — CIDR подсети.
    • --zone — зона доступности, в которой создается подсеть: ru-central1-a.

    Результат:

    id: e1lnabc23r1c9d0efoje
    folder_id: b0g12ga82bcv0cdeferg
    created_at: "2021-10-04T16:29:12.450858436Z"
    name: queue-autoscale-subnet-a
    network_id: enpabce123hde4ft1r3t
    zone_id: ru-central1-a
    v4_cidr_blocks:
    - 192.168.1.0/24
    
  1. Создайте сервисный аккаунт queue-autoscale-sa с помощью вызова gRPC API ServiceAccountService/Create или метода REST API create. В ответных данных будет указан идентификатор сервисного аккаунта.

  2. Назначьте сервисному аккаунту роль editor в каталоге example-folder с помощью вызова gRPC API FolderService/UpdateAccessBindings или метода REST API updateAccessBindings. В теле запроса укажите идентификатор сервисного аккаунта.

  3. Создайте статический ключ доступа для работы сервисного аккаунта с Message Queue и сохраните его в файл access_key:

    1. Используйте вызов gRPC API AccessKeyService/Create или метод REST API create.

    2. Вставьте идентификатор ключа и секретный ключ в файл access_key в следующем формате:

      access_key:
        key_id: <идентификатор ключа>
      secret: <секретный ключ>
      
  4. Создайте облачную сеть queue-autoscale-network с помощью вызова gRPC API NetworkService/Create или метода REST API create. В ответных данных будет указан идентификатор сети.

  5. Создайте подсеть queue-autoscale-subnet-a в зоне ru-central1-a с CIDR 192.168.1.0/24 с помощью вызова gRPC API SubnetService/Create или метода REST API create. В теле запроса укажите идентификатор сети.

Настройте AWS CLI

Примечание

С помощью AWS CLI выполняется последний шаг сценария — проверка масштабирования группы виртуальных машин. Поэтому его нужно установить и настроить, даже если вы не будете использовать его для других шагов.

  1. Скачайте и установите AWS CLI, как описано в его документации.

  2. Настройте AWS CLI для работы с Yandex Cloud:

    1. Создайте в домашнем каталоге файл .aws/credentials и укажите в нем статический ключ доступа, полученный ранее, и его идентификатор:

      [default]
          aws_access_key_id     = <идентификатор ключа>
          aws_secret_access_key = <секретный ключ>
      
    2. Создайте в домашнем каталоге файл .aws/config и укажите в нем регион по умолчанию ru-central1:

      [default]
          region = ru-central1
      

Создайте очередь в Message Queue

Консоль управления
AWS CLI
API
  1. Создайте очередь queue-autoscale-queue:

    1. В консоли управления выберите каталог example-folder.
    2. В списке сервисов выберите Message Queue.
    3. Нажмите кнопку Создать очередь.
    4. Укажите Имя очереди: queue-autoscale-queue.
    5. Нажмите кнопку Создать.
  2. Сохраните URL очереди в файл queue:

    1. В списке очередей выберите queue-autoscale-queue.

    2. Скопируйте URL очереди.

    3. Вставьте URL в файл queue в следующем формате:

      QueueUrl: <URL очереди>
      
  1. Создайте очередь queue-autoscale-queue и сохраните ее URL в файл queue:

    aws sqs create-queue \
      --endpoint https://message-queue.api.cloud.yandex.net \
      --queue-name queue-autoscale-queue \
      --output yaml \
    | tee queue
    

    Где:

    • --endpoint — корневой URL API Message Queue: https://message-queue.api.cloud.yandex.net.
    • --queue-name — имя очереди: queue-autoscale-queue.

    Результат:

    QueueUrl: https://message-queue.api.cloud.yandex.net/b1gvlrnlei4l5idm9cbj/dj6000000003n58805qi/queue-autoscale-queue
    
  1. Создайте очередь queue-autoscale-queue с помощью метода API CreateQueue. В ответных данных будет указан URL очереди.

  2. Вставьте URL очереди в файл queue в следующем формате:

    QueueUrl: <URL очереди>
    

Создайте образ с приложением

  1. Если у вас еще не установлен Packer, скачайте и установите его по инструкции на официальном сайте.

    Примечание

    Для работы с Yandex Cloud требуется Packer версии не ниже 1.5.

  2. Скачайте архив с файлами для образа (ZIP, 3 КБ) и распакуйте его:

    wget https://storage.yandexcloud.net/doc-files/queue-autoscale-server.zip
    unzip queue-autoscale-server.zip
    
  3. В файле server-packer.json измените объект в массиве builders:

    • В поле service_account_id укажите идентификатор сервисного аккаунта queue-autoscale-sa.

      Как узнать идентификатор сервисного аккаунта
      Консоль управления
      CLI
      API
      1. В консоли управления выберите каталог example-folder.
      2. Перейдите на вкладку Сервисные аккаунты.
      3. В списке сервисных аккаунтов выберите queue-autoscale-sa.
      4. Скопируйте Идентификатор сервисного аккаунта.

      Выполните следующую команду:

      yc iam service-account get queue-autoscale-sa
      

      Результат:

      id: aje6brh817ro8o6vo6tv
      folder_id: b0g12ga82bcv0cdeferg
      created_at: "2021-10-04T16:19:10.153346507Z"
      name: queue-autoscale-sa
      

      Используйте вызов gRPC API ServiceAccountService/List или метод REST API list.

    • В поле folder_id укажите идентификатор каталога в Yandex Cloud.

      Как узнать идентификатор каталога
      Консоль управления
      CLI
      API

      В консоли управления найдите каталог example-folder в списке и скопируйте его Идентификатор.

      Выполните следующую команду:

      yc resource-manager folder get example-folder
      

      Результат:

      id: b1g9hv2loamqfnbul7d9
      cloud_id: b1g2y61sxwqxrtw34qtq
      created_at: "2021-10-04T13:21:32.788067492Z"
      name: example-folder
      status: ACTIVE
      

      Используйте вызов gRPC API FolderService/List или метод REST API list.

    • В поле subnet_id укажите идентификатор подсети queue-autoscale-subnet-a.

      Как узнать идентификатор подсети
      Консоль управления
      CLI
      API
      1. В консоли управления выберите каталог example-folder.
      2. В списке сервисов выберите Virtual Private Cloud.
      3. Перейдите на вкладку Подсети.
      4. В списке подсетей найдите queue-autoscale-subnet-a и скопируйте ее Идентификатор.

      Выполните следующую команду:

      yc vpc subnet get queue-autoscale-subnet-a
      

      Результат:

      id: e1lnabc23r1c9d0efoje
      folder_id: b0g12ga82bcv0cdeferg
      created_at: "2021-10-04T16:29:12.450858436Z"
      name: queue-autoscale-subnet-a
      network_id: enpabce123hde4ft1r3t
      zone_id: ru-central1-a
      v4_cidr_blocks:
      - 192.168.1.0/24
      

      Используйте вызов gRPC API SubnetService/List или метод REST API list.

  4. Получите IAM-токен для работы сервисного аккаунта с Compute Cloud и сохраните его в файл key.json:

    CLI
    yc iam key create \
      --service-account-name queue-autoscale-sa \
      --description "Compute Cloud" \
      --output key.json
    

    Где:

    • --service-account-name — имя сервисного аккаунта, созданного ранее: queue-autoscale-sa.
    • --description — описание ключа.
    • --output — путь к файлу, в который нужно сохранить ключ: key.json.

    Результат:

    id: ajevh3a0hrqf65scefug
    service_account_id: aje6brh817ro8o6vo6tv
    created_at: "2021-10-04T16:35:19.057777570Z"
    description: Compute Cloud
    key_algorithm: RSA_2048
    
  5. Выполните команду для создания образа:

    packer build server-packer.json
    

    Результат:

    ...
    Build 'builder' finished after 2 minutes 48 seconds.
    
    ==> Wait completed after 2 minutes 48 seconds
    
    ==> Builds finished. The artifacts of successful builds are:
    --> builder: A disk image was created: queue-autoscale-image-v1633354734 (id: fd8hlbuhjc4mssrvknkv) with family name queue-autoscale-image
    

Создайте группу виртуальных машин

Консоль управления
CLI
API
  1. В консоли управления выберите каталог example-folder.

  2. В списке сервисов выберите Compute Cloud.

  3. Перейдите на вкладку Группы виртуальных машин и нажмите кнопку Создать группу.

  4. Укажите Базовые параметры группы ВМ:

    • Имя — queue-autoscale-ig.
    • Сервисный аккаунт — queue-autoscale-sa.
  5. В блоке Распределение выберите зону доступности ru-central1-a.

  6. В блоке Шаблон виртуальной машины нажмите кнопку Задать и настройте шаблон:

    1. В блоке Выбор образа/загрузочного диска перейдите на вкладку Пользовательские и нажмите кнопку Выбрать.

    2. В открывшемся окне выберите созданный образ в качестве загрузочного диска:

      1. Перейдите на вкладку Образ.
      2. Выберите образ, имя которого начинается на queue-autoscale-image.
      3. Нажмите кнопку Применить
    3. В блоке Сетевые настройки:

      • Выберите Сеть queue-autoscale-network. Подсеть queue-autoscale-subnet-a будет выбрана автоматически.
      • В поле Публичный адрес выберите Автоматически, чтобы ВМ имели доступ в интернет и могли получать сообщения из очереди.
    4. В блоке Доступ:

      • Выберите Сервисный аккаунт queue-autoscale-sa.
      • Укажите логин и содержимое открытого ключа для подключения к ВМ.
    5. Нажмите кнопку Сохранить.

  7. В блоке В процессе создания и обновления разрешено укажите следующие значения:

    • Одновременно останавливать — 1.
    • Останавливать машины по стратегии — Деликатная.
  8. В блоке Масштабирование укажите следующие значения:

    • Тип — Автоматический.
    • Тип автомасштабирования — Региональное.
    • Минимальное количество ВМ в зоне — 0.
    • Максимальный размер группы — 5.
    • Промежуток измерения нагрузки — 60 секунд.
    • Время на разогрев ВМ — 0 минут.
    • Период стабилизации — 5 минут.
    • Начальный размер группы — 1.
  9. В блоке Метрики укажите следующие значения:

    • Метрика — Пользовательская.
    • Идентификатор сервиса — message-queue.
    • Имя метрики — queue.messages.stored_count.
    • Метки — ключ queue, значение queue-autoscale-queue.
    • Тип метрики — GAUGE.
    • Тип правила — WORKLOAD.
    • Целевое значение — 5.
  10. Нажмите кнопку Создать.

  1. Получите идентификатор образа, созданного ранее:

    yc compute image get-latest-from-family queue-autoscale-image 
    

    Результат:

    id: fd8hlbuhjc4mssrvknkv
    folder_id: b0g12ga82bcv0cdeferg
    created_at: "2021-10-04T16:38:54.345168059Z"
    name: queue-autoscale-image-v1633354734
    description: Image for autoscaling an instance group based on the size of a queue
    family: queue-autoscale-image
    storage_size: "3858759680"
    min_disk_size: "5368709120"
    product_ids:
    - f2e6fnj3erf1sropamjr
    status: READY
    os:
      type: LINUX
    
  2. Измените файл со спецификацией группы ВМ spec.yaml:

    • В поле folder_id укажите идентификатор каталога в Yandex Cloud.

    • В поле image_id укажите идентификатор созданного образа.

    • В поле network_id укажите идентификатор сети queue-autoscale-network, а в поле subnet_ids — идентификатор подсети queue-autoscale-subnet-a.

      Как узнать идентификатор сети

      • CLI

        Выполните команду:

        yc vpc network get queue-autoscale-network
        

        Результат:

        id: enpabce123hde4ft1r3t
        folder_id: b0g12ga82bcv0cdeferg
        created_at: "2021-10-04T16:28:15.905337847Z"
        name: queue-autoscale-network
        
      • Консоль управления

        1. В консоли управления выберите каталог example-folder.
        2. В списке сервисов выберите Virtual Private Cloud.
        3. В списке сетей найдите queue-autoscale-network и скопируйте ее Идентификатор.
      • API

        Используйте вызов gRPC API NetworkService/List или метод REST API list.

    • В поле service_account_id укажите идентификатор сервисного аккаунта queue-autoscale-sa.

    Как получить идентификаторы ресурсов (кроме образа и сети), см. в шаге 3 раздела Создайте образ с приложением.

  3. Создайте группу ВМ queue-autoscale-ig по спецификации:

    yc compute instance-group create --file spec.yaml
    

    Где --file — путь к файлу со спецификацией группы ВМ: spec.yaml.

  1. Получите идентификатор образа из семейства queue-autoscale-image, созданного ранее, с помощью вызова gRPC API ImageService/GetLatestByFamily или метода REST API getLatestByFamily.

  2. Измените файл со спецификацией группы виртуальных spec.yaml:

    • В поле folder_id укажите идентификатор каталога в Yandex Cloud.

    • В поле image_id укажите идентификатор созданного образа.

    • В поле network_id укажите идентификатор сети queue-autoscale-network, а в поле subnet_ids — идентификатор подсети queue-autoscale-subnet-a.

      Как узнать идентификатор сети

      • API

        Используйте вызов gRPC API NetworkService/List или метод REST API list.

      • Консоль управления

        1. В консоли управления выберите каталог example-folder.
        2. В списке сервисов выберите Virtual Private Cloud.
        3. В списке сетей найдите queue-autoscale-network и скопируйте ее Идентификатор.
      • CLI

        Выполните следующую команду:

        yc vpc network get queue-autoscale-network
        

        Результат:

        id: enpabce123hde4ft1r3t
        folder_id: b0g12ga82bcv0cdeferg
        created_at: "2021-10-04T16:28:15.905337847Z"
        name: queue-autoscale-network
        
    • В поле service_account_id укажите идентификатор сервисного аккаунта queue-autoscale-sa.

    Как получить идентификаторы ресурсов (кроме образа и сети), см. в шаге 3 раздела Создайте образ с приложением.

  3. Создайте группу ВМ queue-autoscale-ig по спецификации spec.yaml с помощью вызова gRPC API InstanceGroupService/CreateFromYaml или метода REST API createFromYaml.

Проверьте масштабирование группы виртуальных машин

  1. Измените файл messages.sh: в параметре --queue-url укажите URL очереди из файла queue.

  2. Запустите файл messages.sh. Начнется поочередная отправка 100 сообщений в очередь queue-autoscale-queue.

  3. Откройте дашборды в Yandex Monitoring:

    Консоль управления
    1. Откройте дашборд с информацией о группе ВМ:

      1. В Yandex Monitoring выберите сервисный дашборд Compute — Instance Groups.
      2. В поле Instance Group ID выберите queue-autoscale-ig.
    2. Откройте дашборд с информацией об очереди:

      1. В Yandex Monitoring выберите сервисный дашборд Message Queue.
      2. В поле Queue ID выберите queue-autoscale-queue.
  4. По данным дашбордов убедитесь, что последовательно произошли следующие события:

    1. Очередь queue-autoscale-queue заполнилась 100 сообщениями (дашборд Message Queue, графики Sent messages, count и Messages in queue, count).
    2. ВМ из группы queue-autoscale-ig стали получать сообщения (график Received messages, count) и удалять их из очереди (графики Deleted messages, count и Messages in queue, count).
    3. По мере обработки сообщений группа ВМ увеличилась с одной до пяти машин, а по окончании обработки — стала пустой (дашборд Compute — Instance Groups, график Number of instances in zone B).

Удалите созданные ресурсы

Чтобы остановить работу инфраструктуры и перестать платить за созданные ресурсы:

  1. Удалите группу виртуальных машин queue-autoscale-ig.
  2. Удалите образ из семейства queue-autoscale-image.
  3. Удалите очередь queue-autoscale-queue.
  4. Удалите подсеть queue-autoscale-subnet-a.
  5. Удалите сеть queue-autoscale-network.
  6. Удалите сервисный аккаунт queue-autoscale-sa.

Была ли статья полезна?

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Перед началом работы
  • Необходимые платные ресурсы
  • Подготовьте окружение
  • Создайте вспомогательные ресурсы Yandex Cloud
  • Настройте AWS CLI
  • Создайте очередь в Message Queue
  • Создайте образ с приложением
  • Создайте группу виртуальных машин
  • Проверьте масштабирование группы виртуальных машин
  • Удалите созданные ресурсы