Cloudformation te gebruiken om SQS wachtrijen op AWS aan te maken

AWS Simple Queue Service (SQS) is een volledig beheerde berichtenwachtrijdienst waarmee we microservices, serverloze toepassingen en gedistribueerde systemen kunnen ontkoppelen en schalen. Met behulp van SQS kunnen we berichten tussen softwarecomponenten verzenden, opslaan en ontvangen zonder ze kwijt te raken. AWS SQS biedt twee soorten berichtwachtrijen, Standaard wachtrijen en FIFO wachtrijen. Om meer te begrijpen over SQS wachtrijen kun je zoeken naar het artikel “Hoe maak je een SQS wachtrij op AWS?”.

Met AWS CloudFormation kunnen we programmeertalen (yaml/json) of een eenvoudig tekstbestand gebruiken om alle voor onze toepassingen benodigde resources te modelleren en te voorzien. Dit geeft ons een enkele bron van waarheid voor onze AWS-bronnen.

In dit artikel zullen we de stappen zien om een Standaard en FIFO wachtrij aan te maken met behulp van Cloudformation Stack.

Randvoorwaarden

  1. AWS-account (Maak als je er geen hebt).
  2. Basiskennis van Cloudformation Stack.
  3. Basiskennis van SQS wachtrijen.

Wat gaan we doen?

  1. Inloggen op AWS.
  2. Een standaard wachtrij maken met Cloudformation Stack
  3. Een FIFO wachtrij maken met Cloudformation Stack

Inloggen op AWS

  1. Klik op hier om naar de AWS Login Page te gaan.

Als we op bovenstaande link klikken, zien we de volgende webpagina waar we moeten inloggen met onze inloggegevens.

Inloggen op AWS

Zodra we met succes inloggen bij AWS, zien we de hoofdconsole met alle diensten opgesomd.

AWS Beheersconsole

Een standaard wachtrij aanmaken met Cloudformation Stack

Voordat we overgaan tot het aanmaken van een Standaard Wachtrij, moet je de code uit het volgende blok kopiƫren of de sjabloon hierdownloaden en opslaan op je lokale machine. Dit sjabloon zal nodig zijn tijdens het maken van een Cloudformation Stack.

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

Om een Standard Queue aan te maken met de Cloudformation Stack, klik je op “Services” in de bovenste menubalk en zoek je naar “Cloudformation”.

Standaard QUEUE

Op het hoofddashboard voor Cloudformation klik je op “Create Stack” om een stack aan te maken.

Stapels

Om het sjabloon van je lokale machine te uploaden, klik je op het keuzerondje “Upload a template file” en klik je op “Next”.

Maak stapel

Geef een naam op voor de aan te maken stack en vul de vereiste gegevens in of ga verder met de standaardwaarden en klik op “Volgende”.

Stapel details

Specificeer de tag die op de SQS kan worden toegepast bij het aanmaken ervan en klik op “Volgende”.

Geavanceerde opties

Scroll naar beneden en klik op de knop “Create Stack” om een stack aan te maken die een Standard Queue aanmaakt.

Beleid en kennisgevingen

Je ziet de status onder Gebeurtenissen. Zodra de status verandert in “CREATE_COMPLETE” van de stapel, betekent dit dat de wachtrij is aangemaakt.

SQS wachtrij aangemaakt

Klik op “Services” en zoek naar “SQS” om te zien of de wachtrij is aangemaakt of niet.

SQS-dienst

Op het hoofddashboard van de SQS kun je zien dat de wachtrij is aangemaakt en de naam die aan de wachtrij is gegeven is Cloudformation Stack name met een willekeurige suffix string erbij, de reden hiervoor is dat we in de stack geen wachtrijnaam hebben opgegeven.

Nieuwe QUEUE aanmaken

Een FIFO wachtrij maken met Cloudformation Stack

Voordat we verder gaan met het maken van een FIFO Queue, kopieerje de code uit het volgende blok of download je het sjabloon van hier en sla je het op je lokale systeem op.

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

Ga terug naar het hoofddashboard van Cloudformation en volg dezelfde stappen die we volgden om een Standard Queue aan te maken.

FIFO-staart

Zodra de stapel is aangemaakt, zie je dat de FIFO Queue klaar is voor gebruik. Hier zie je dat de FIFO Queue niet een of andere willekeurige string heeft, de reden hiervoor is dat we een optie hebben in de Cloudformation Template waar we de naam voor de aan te maken Queue kunnen opgeven.

Staartlijst

Als de Wachtrijen niet meer nodig zijn, kunnen ze verwijderd worden door de Cloudformation Stack uit het hoofddashboard te verwijderen.

Lijst van stapels

Conclusie

In dit artikel hebben we de stappen gezien om een Standard en FIFO Queue aan te maken met behulp van Cloudformation Stack.