Поиск по сайту:

Как использовать Cloudformation для создания очередей SQS на AWS


На этой странице

  1. Предварительные требования
  2. Что будем делать?
  3. Создание стандартной очереди с помощью стека Cloudformation
  4. Создание очереди FIFO с помощью стека Cloudformation
  5. Заключение

AWS Simple Queue Service (SQS) – это полностью управляемый сервис очередей сообщений, который позволяет нам разделять и масштабировать микросервисы, бессерверные приложения и распределенные системы. С помощью SQS мы можем отправлять, хранить и получать сообщения между программными компонентами без их потери. AWS SQS предлагает два типа очередей сообщений: стандартные очереди и очереди FIFO. Чтобы узнать больше об очередях SQS, найдите статью «Как создать очередь SQS на AWS?».

AWS CloudFormation позволяет нам использовать языки программирования (yaml/json) или простой текстовый файл для моделирования и предоставления всех ресурсов, необходимых для наших приложений. Это дает нам единый источник достоверной информации о наших ресурсах AWS.

В этой статье мы увидим шаги по созданию стандартной очереди и очереди FIFO с использованием стека Cloudformation.

Предпосылки

  1. Аккаунт AWS (создайте, если у вас его нет).
  2. Основное понимание стека Cloudformation.
  3. Основное понимание очередей SQS.

Что мы будем делать?

  1. Войдите в AWS.
  2. Создание стандартной очереди с помощью стека Cloudformation
  3. Создание очереди FIFO с помощью стека Cloudformation

Войти в АВС

  1. Нажмите здесь, чтобы перейти на страницу входа в AWS.

Когда мы перейдем по приведенной выше ссылке, мы увидим следующую веб-страницу, где нам необходимо войти в систему, используя наши данные для входа.

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

Создайте стандартную очередь с помощью стека Cloudformation

Прежде чем мы приступим к созданию стандартной очереди, скопируйте код из следующего блока или загрузите шаблон отсюда и сохраните его на локальном компьютере. Этот шаблон потребуется при создании стека Cloudformation.

---
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\.

На главной панели Cloudformation нажмите «Создать стек», чтобы создать стек.

Чтобы загрузить шаблон с вашего локального компьютера, щелкните переключатель «Загрузить файл шаблона» и нажмите «Далее».

Укажите имя создаваемого стека и заполните необходимые данные или оставьте значения по умолчанию и нажмите \Далее\.

Укажите тег, который можно применить к SQS при его создании, и нажмите «Далее».

Прокрутите страницу вниз и нажмите кнопку \Создать стопку\, чтобы создать стопку, которая создаст стандартную очередь.

Статус можно увидеть в разделе «События». Как только статус стека изменится на CREATE_COMPLETE, это означает, что очередь создана.

Нажмите на \Услуги\ и найдите \SQS\, чтобы увидеть, была ли создана очередь или нет.

На главной панели SQS вы можете видеть, что очередь была создана, и имя, данное очереди, — это имя стека Cloudformation с некоторой случайной строкой суффикса. Причина этого в том, что мы не указали имя очереди в куча.

Создайте очередь FIFO с помощью стека Cloudformation.

Прежде чем мы приступим к созданию очереди 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

Вернитесь на главную панель инструментов Cloudformation и выполните те же шаги, которые мы выполнили для создания стандартной очереди.

Как только стек будет создан, вы увидите, что очередь FIFO готова к использованию. Здесь вы видите, что в очереди FIFO нет случайной строки, причина этого в том, что у нас есть опция в шаблоне Cloudformation, где мы можем указать имя создаваемой очереди.

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

Заключение

В этой статье мы рассмотрели шаги по созданию стандартной очереди и очереди FIFO с использованием стека Cloudformation.