Гид по технологиям

Создание SQS (Standard и FIFO) через AWS CloudFormation

5 min read AWS CloudFormation Обновлено 21 Nov 2025
SQS через AWS CloudFormation: Standard и FIFO
SQS через AWS CloudFormation: Standard и FIFO

TL;DR

В статье показано, как создать Standard и FIFO очереди AWS SQS с помощью шаблонов CloudFormation. Приведены готовые YAML-шаблоны, пошаговые инструкции в консоли, рекомендации по параметрам и проверке результата.

Предварительные требования

  • Аккаунт AWS (создайте, если нет).
  • Базовые знания CloudFormation (стэки, шаблоны YAML/JSON).
  • Базовые знания SQS (отличия Standard и FIFO).

Что сделаем

  1. Войдём в AWS Management Console.
  2. Создадим Standard Queue через CloudFormation Stack.
  3. Создадим FIFO Queue через CloudFormation Stack.
  4. Проверим и удалим стэк при необходимости.

Вход в AWS

Перейдите на страницу входа в AWS и авторизуйтесь под своей учётной записью.

Страница входа в AWS

После успешного входа вы увидите консоль управления AWS с перечнем сервисов.

Консоль управления AWS с перечнем сервисов

Общая идея и термины

  • SQS (Simple Queue Service) — полностью управляемый сервис очередей сообщений.
  • Standard Queue — высокая пропускная способность, допустимы дубли и порядок сообщений не гарантируется.
  • FIFO Queue — строгий порядок и отсутствие дубликатов (при включённой дедупликации), ограниченная пропускная способность.
  • Dead-letter queue (DLQ) — очередь для сообщений, которые не удалось обработать.

Важно: параметры вроде VisibilityTimeout и MessageRetentionPeriod указываются в секундах.

Создание Standard Queue с помощью CloudFormation

Скопируйте приведённый ниже шаблон YAML или скачайте локально, затем загрузите его при создании стэка.

---
AWSTemplateFormatVersion: '2010-09-09'
Description: This stack creates a Standard Queue
Parameters:
  DelaySeconds:
    Description: "The time in seconds that the delivery of all messages in the queue is delayed"
    Type: Number
    Default: '5'
  MaximumMessageSize:
    Type: Number
    Description: "The limit of how many bytes that a message can contain before Amazon SQS rejects it"
    Default: '262144'
  MessageRetentionPeriod:
    Description: "The number of seconds that Amazon SQS retains a message."
    Type: Number
    Default: '345600'
  ReceiveMessageWaitTimeSeconds:
    Description: "Specifies the duration, in seconds, that the ReceiveMessage action call waits until a message is in the queue in order to include it in the response"
    Type: Number
    Default: '0'
  UsedeadletterQueue:
    Description: "A dead-letter queue is a queue that other (source) queues can target for messages that can't be processed (consumed) successfully."
    Type: String
    AllowedValues:
    - 'true'
    - 'false'
    Default: 'false'
  VisibilityTimeout:
    Description: "This should be longer than the time it would take to process and delete a message"
    Type: Number
    Default: '5'
Mappings: {}
Conditions:
  CreateDeadLetterQueue:
    Fn::Equals:
    - Ref: UsedeadletterQueue
    - 'true'
Resources:
  SQSQueue:
    Type: AWS::SQS::Queue
    Properties:
      DelaySeconds:
        Ref: DelaySeconds
      MaximumMessageSize:
        Ref: MaximumMessageSize
      MessageRetentionPeriod:
        Ref: MessageRetentionPeriod
      ReceiveMessageWaitTimeSeconds:
        Ref: ReceiveMessageWaitTimeSeconds
      RedrivePolicy:
        Fn::If:
        - CreateDeadLetterQueue
        - deadLetterTargetArn:
            Fn::GetAtt:
            - MyDeadLetterQueue
            - Arn
          maxReceiveCount: 5
        - Ref: AWS::NoValue
      VisibilityTimeout:
        Ref: VisibilityTimeout
  MyDeadLetterQueue:
    Condition: CreateDeadLetterQueue
    Type: AWS::SQS::Queue
Outputs:
  QueueURL:
    Description: URL of the created SQS
    Value:
      Ref: SQSQueue
  QueueARN:
    Description: ARN of the created SQS
    Value:
      Fn::GetAtt:
      - SQSQueue
      - Arn
  QueueName:
    Description: Name of the created SQS
    Value:
      Fn::GetAtt:
      - SQSQueue
      - QueueName
  DeadLetterQueueURL:
    Condition: CreateDeadLetterQueue
    Description: URL of the dead letter queue
    Value:
      Ref: MyDeadLetterQueue
  DeadLetterQueueARN:
    Condition: CreateDeadLetterQueue
    Description: ARN of the dead letter queue
    Value:
      Fn::GetAtt:
      - MyDeadLetterQueue
      - Arn

Пошаговые действия в консоли:

  1. В панели сервисов найдите CloudFormation.

CloudFormation — поиск сервиса

  1. На дашборде CloudFormation нажмите Create Stack.

Создание стэка CloudFormation

  1. Выберите Upload a template file и загрузите локальный YAML-файл, затем Next.

Загрузка шаблона

  1. Укажите имя стэка и, при желании, измените параметры (DelaySeconds, VisibilityTimeout и т. д.), затем Next.

Детали стэка

  1. При необходимости добавьте теги и продвинутые параметры, затем Create Stack.

Теги и расширенные опции

  1. Следите за Events — после статуса CREATE_COMPLETE очередь создана.

Статус создания стэка

  1. Перейдите в сервис SQS и убедитесь, что очередь появилась в списке. Обратите внимание: если в шаблоне не задан QueueName, к имени стэка добавится случайный суффикс.

Статус создания очереди

Сервис SQS в консоли

Список очередей — стандартная очередь с суффиксом

Советы по шаблону Standard Queue

  • VisibilityTimeout должен быть больше, чем максимальное время обработки сообщения вашим потребителем.
  • MessageRetentionPeriod задаёт, сколько секунд сообщение хранится прежде чем удалится автоматически.
  • Если планируете обрабатывать сообщения с возможными ошибками, включите Dead-letter queue (UsedeadletterQueue: ‘true’).

Создание FIFO Queue с помощью CloudFormation

Шаблон FIFO похож, но обязательно указывает FifoQueue: ‘true’ и имя заканчивается на .fifo. Скопируйте и сохраните шаблон ниже:

---
AWSTemplateFormatVersion: '2010-09-09'
Description: This stack creates a FIFO Queue
Parameters:
  ContentBasedDeduplication:
    Description: Specifie whether to enable content-based deduplication
    Type: String
    AllowedValues:
    - 'true'
    - 'false'
    Default: 'true'
  QueueName:
    Description: This stack will append .fifo to the end of the Queue name.
    Type: String
  DelaySeconds:
    Description: "The time in seconds that the delivery of all messages in the queue"
    Type: Number
    Default: '5'
  MaximumMessageSize:
    Type: Number
    Description: "The limit of how many bytes that a message can contain before Amazon"
    Default: '262144'
  MessageRetentionPeriod:
    Description: "The number of seconds that Amazon SQS retains a message."
    Type: Number
    Default: '345600'
  ReceiveMessageWaitTimeSeconds:
    Description: "Specifies the duration, in seconds, that the ReceiveMessage action
      call waits until a message is in the queue in order to include it in the response"
    Type: Number
    Default: '0'
  UsedeadletterQueue:
    Description: "A dead-letter queue is a queue that other (source) queues can target
      for messages that can't be processed (consumed) successfully."
    Type: String
    AllowedValues:
    - 'true'
    - 'false'
    Default: 'false'
  VisibilityTimeout:
    Description: "This should be longer than the time it would take to process and
      delete a message"
    Type: Number
    Default: '5'
Mappings: {}
Conditions:
  CreateDeadLetterQueue:
    Fn::Equals:
    - Ref: UsedeadletterQueue
    - 'true'
Resources:
  SQSQueue:
    Type: AWS::SQS::Queue
    Properties:
      ContentBasedDeduplication:
        Ref: ContentBasedDeduplication
      FifoQueue: 'true'
      QueueName:
        Fn::Join:
        - ''
        - - Ref: QueueName
          - ".fifo"
      MaximumMessageSize:
        Ref: MaximumMessageSize
      MessageRetentionPeriod:
        Ref: MessageRetentionPeriod
      ReceiveMessageWaitTimeSeconds:
        Ref: ReceiveMessageWaitTimeSeconds
      RedrivePolicy:
        Fn::If:
        - CreateDeadLetterQueue
        - deadLetterTargetArn:
            Fn::GetAtt:
            - MyDeadLetterQueue
            - Arn
          maxReceiveCount: 5
        - Ref: AWS::NoValue
      VisibilityTimeout:
        Ref: VisibilityTimeout
  MyDeadLetterQueue:
    Condition: CreateDeadLetterQueue
    Type: AWS::SQS::Queue
    Properties:
      FifoQueue: 'true'
      QueueName:
        Fn::Join:
        - ''
        - - Ref: QueueName
          - Deadletter
          - ".fifo"
Outputs:
  QueueURL:
    Description: URL of the created SQS
    Value:
      Ref: SQSQueue
  QueueARN:
    Description: ARN of the created SQS
    Value:
      Fn::GetAtt:
      - SQSQueue
      - Arn
  QueueName:
    Description: Name of the created SQS
    Value:
      Fn::GetAtt:
      - SQSQueue
      - QueueName

Повторите в консоли те же шаги для загрузки шаблона и создания стэка.

Создание FIFO очереди через CloudFormation

После создания вы увидите FIFO-очередь с именем, которое вы явно задали (суффикс .fifo обязателен).

Список очередей — FIFO с заданным именем

Если очереди больше не нужны, удалите соответствующий стэк из CloudFormation — это удалит все ресурсы, созданные стэком.

Список стэков в CloudFormation

Отличия Standard и FIFO и как выбрать

  • Производительность: Standard поддерживает высокую пропускную способность; FIFO ограничена и подходит для операций, требующих строгого порядка.
  • Порядок: FIFO гарантирует упорядоченность при использовании MessageGroupId.
  • Дедупликация: FIFO может использовать ContentBasedDeduplication или MessageDeduplicationId.
  • Подход: Выберите FIFO, если порядок и отсутствие дубликатов критичны; иначе Standard.

Контрпример: если у вас большое количество параллельных задач и порядок не важен, использование FIFO может стать узким местом.

Альтернативные способы создания SQS

  • AWS Console — ручное создание через веб-интерфейс.
  • AWS CLI — aws sqs create-queue / cloudformation deploy.
  • AWS CDK — описываете очередь в коде (TypeScript/Python) и деплоите.

Преимущества CloudFormation: декларативность, один источник правды, управление версиями шаблонов и автоматическое удаление ресурсов при удалении стэка.

Мини-плейбук для деплоя очереди (роли и чеклист)

Роль DevOps:

  • Проверить IAM-политику для CloudFormation и SQS.
  • Прогонить шаблон в тестовом аккаунте.
  • Настроить теги и мониторинг.

Роль Разработчик:

  • Убедиться, что приложение использует правильный URL очереди и параметры VisibilityTimeout.
  • Настроить обработку повторных попыток и DLQ.

Чеклист перед деплоем:

  • Шаблон валиден YAML (aws cloudformation validate-template).
  • Указаны корректные значения параметров (таймауты, размер сообщения).
  • Если FIFO — имя заканчивается на .fifo.
  • Для DLQ указана политика RedrivePolicy.

Критерии приёмки

  • Статус стэка CloudFormation — CREATE_COMPLETE.
  • Очередь отображается в SQS-консоли.
  • Outputs стэка содержат QueueURL и QueueARN.
  • Для FIFO — имя очереди заканчивается на .fifo и FifoQueue=true.

Быстрые рекомендации по безопасности и эксплуатации

  • Ограничьте доступ к очередям через IAM-политики, минимизируйте права.
  • Включите мониторинг CloudWatch для отслеживания видимых/невидимых сообщений и задержек.
  • Настройте DLQ для сообщений, которые не поддаются обработке.

Важно: не храните в очереди чувствительные данные без шифрования и без соответствующей политики доступа.

Отладка и типовые ошибки

  • Ошибка: «Queue name must end with .fifo» — для FIFO обязательно добавьте .fifo.
  • Проблема: сообщения повторяются — включите дедупликацию для FIFO или обработайте идемпотентно на потребителе.
  • Стек не создаётся — проверьте валидность шаблона и IAM-права для создания SQS.

Простой runbook для отката:

  1. Остановите потребителей сообщений.
  2. Удалите или обновите стэк в CloudFormation.
  3. Проверьте, что связанные ресурсы (DLQ, политики) также удалены.
  4. Перезапустите потребителей с обновлёнными параметрами очереди.

Итоги

  • CloudFormation позволяет декларативно создавать как Standard, так и FIFO очереди SQS.
  • Используйте шаблоны для воспроизводимости, контроля версий и автоматизации среды.
  • Проверьте параметры VisibilityTimeout, MessageRetentionPeriod и настройку DLQ перед деплоем.

Ключевые шаги: подготовить шаблон, загрузить его в CloudFormation, задать параметры и дождаться CREATE_COMPLETE, затем проверить очередь в SQS.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство