Cómo utilizar Cloudformation para crear colas SQS en AWS

AWS Simple Queue Service (SQS) es un servicio de cola de mensajes totalmente gestionado que nos permite desacoplar y escalar microservicios, aplicaciones sin servidor y sistemas distribuidos. Utilizando SQS, podemos enviar, almacenar y recibir mensajes entre componentes de software sin perderlos. AWS SQS ofrece dos tipos de colas de mensajes, colas estándar y colas FIFO. Para saber más sobre las colas SQS, busca el artículo «¿Cómo crear una cola SQS en AWS?

AWS CloudFormation nos permite utilizar lenguajes de programación (yaml/json) o un simple archivo de texto para modelar y aprovisionar todos los recursos necesarios para nuestras aplicaciones. Esto nos proporciona una única fuente de verdad para nuestros recursos de AWS.

En este artículo, veremos los pasos para crear una cola estándar y una cola FIFO utilizando Cloudformation Stack.

Requisitos previos

  1. Cuenta de AWS (Crea si no tienes una).
  2. Conocimiento básico de Cloudformation Stack.
  3. Conocimiento básico de las colas SQS.

¿Qué vamos a hacer?

  1. Iniciar sesión en AWS.
  2. Crea una cola estándar utilizando Cloudformation Stack
  3. Crear una cola FIFO utilizando Cloudformation Stack

Inicia sesión en AWS

  1. Haz clic en aquí para ir a la página de inicio de sesión de AWS.

Cuando pulsemos el enlace anterior, veremos una página web como la siguiente en la que se nos pide que iniciemos sesión con nuestros datos de acceso.

Entra en AWS

Una vez que iniciemos sesión en AWS con éxito, veremos la consola principal con todos los servicios listados.

Consola de administración de AWS

Crear una cola estándar con Cloudformation Stack

Antes de proceder a crear una Cola Estándar, copia el código del siguiente bloque o descarga la plantilla desdeaquí y guárdala en tu máquina local. Esta plantilla será necesaria al crear una Pila de Formación de la Nube.

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

Para crear una Cola Estándar utilizando Cloudformation Stack, haz clic en «Servicios» en la barra de menú superior y busca «Cloudformation».

Norma QUEUE

En el panel principal de Cloudformation, haz clic en «Crear pila» para crear una pila.

Pilas

Para subir la plantilla desde tu máquina local, haz clic en el botón de opción «Subir un archivo de plantilla» y haz clic en «Siguiente».

Crear pila

Especifica un nombre para la pila que se va a crear y rellena los detalles necesarios o sigue con los valores por defecto y haz clic en «Siguiente».

Detalles de la pila

Especifica la etiqueta que se puede aplicar al SQS tras su creación y haz clic en «Siguiente».

Opciones avanzadas

Desplázate hacia abajo en la página y haz clic en el botón «Crear pila» para crear una pila que creará una cola estándar.

Políticas y notificaciones

Puedes ver el estado en Eventos. Una vez que el estado cambie a «CREATE_COMPLETE» de la pila, significa que la Cola ha sido creada.

Cola SQS creada

Haz clic en «Servicios» y busca «SQS» para ver si la cola se ha creado o no.

Servicio SQS

En el panel principal del SQS, puedes ver que la cola se ha creado y que el nombre dado a la cola es el nombre de la pila de Cloudformation con alguna cadena de sufijo aleatoria, la razón de esto es que no hemos especificado el nombre de la cola en la pila.

Crear una nueva COLA

Crear una cola FIFO con la pila de Cloudformation

Antes de proceder a crear una cola FIFO,copia el código del siguiente bloque o descarga la plantilla desdeaquí y guárdala en tu sistema local.

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

Vuelve al panel principal de Cloudformation y sigue los mismos pasos que hemos seguido para crear una cola estándar.

Cola FIFO

Una vez creada la pila, puedes ver que la Cola FIFO está lista para ser utilizada. Aquí ves que la Cola FIFO no tiene una cadena aleatoria, la razón es que tenemos una opción en la Plantilla de Cloudformation donde podemos especificar el nombre de la Cola que se va a crear.

Lista de colas

Si las Colas ya no son necesarias, se pueden eliminar borrando la Pila de Formación de la Nube desde el panel principal.

Lista de pilas

Conclusión

En este artículo hemos visto los pasos para crear una Cola Estándar y una Cola FIFO utilizando Cloudformation Stack.

Scroll al inicio