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
- AWS-account (Maak als je er geen hebt).
- Basiskennis van Cloudformation Stack.
- Basiskennis van SQS wachtrijen.
Wat gaan we doen?
- Inloggen op AWS.
- Een standaard wachtrij maken met Cloudformation Stack
- Een FIFO wachtrij maken met Cloudformation Stack
Inloggen op AWS
- 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.
Zodra we met succes inloggen bij AWS, zien we de hoofdconsole met alle diensten opgesomd.
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”.
Op het hoofddashboard voor Cloudformation klik je op “Create Stack” om een stack aan te maken.
Om het sjabloon van je lokale machine te uploaden, klik je op het keuzerondje “Upload a template file” en klik je op “Next”.
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”.
Specificeer de tag die op de SQS kan worden toegepast bij het aanmaken ervan en klik op “Volgende”.
Scroll naar beneden en klik op de knop “Create Stack” om een stack aan te maken die een Standard Queue aanmaakt.
Je ziet de status onder Gebeurtenissen. Zodra de status verandert in “CREATE_COMPLETE” van de stapel, betekent dit dat de wachtrij is aangemaakt.
Klik op “Services” en zoek naar “SQS” om te zien of de wachtrij is aangemaakt of niet.
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.
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.
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.
Als de Wachtrijen niet meer nodig zijn, kunnen ze verwijderd worden door de Cloudformation Stack uit het hoofddashboard te verwijderen.
Conclusie
In dit artikel hebben we de stappen gezien om een Standard en FIFO Queue aan te maken met behulp van Cloudformation Stack.