Создание SQS (Standard и FIFO) через AWS CloudFormation
TL;DR
В статье показано, как создать Standard и FIFO очереди AWS SQS с помощью шаблонов CloudFormation. Приведены готовые YAML-шаблоны, пошаговые инструкции в консоли, рекомендации по параметрам и проверке результата.
Предварительные требования
- Аккаунт AWS (создайте, если нет).
- Базовые знания CloudFormation (стэки, шаблоны YAML/JSON).
- Базовые знания SQS (отличия Standard и FIFO).
Что сделаем
- Войдём в AWS Management Console.
- Создадим Standard Queue через CloudFormation Stack.
- Создадим FIFO Queue через CloudFormation Stack.
- Проверим и удалим стэк при необходимости.
Вход в 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Пошаговые действия в консоли:
- В панели сервисов найдите CloudFormation.

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

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

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

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

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

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



Советы по шаблону 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-очередь с именем, которое вы явно задали (суффикс .fifo обязателен).

Если очереди больше не нужны, удалите соответствующий стэк из 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 для отката:
- Остановите потребителей сообщений.
- Удалите или обновите стэк в CloudFormation.
- Проверьте, что связанные ресурсы (DLQ, политики) также удалены.
- Перезапустите потребителей с обновлёнными параметрами очереди.
Итоги
- CloudFormation позволяет декларативно создавать как Standard, так и FIFO очереди SQS.
- Используйте шаблоны для воспроизводимости, контроля версий и автоматизации среды.
- Проверьте параметры VisibilityTimeout, MessageRetentionPeriod и настройку DLQ перед деплоем.
Ключевые шаги: подготовить шаблон, загрузить его в CloudFormation, задать параметры и дождаться CREATE_COMPLETE, затем проверить очередь в SQS.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone