:py:mod:`airflow.providers.amazon.aws.hooks.sqs`
================================================

.. py:module:: airflow.providers.amazon.aws.hooks.sqs

.. autoapi-nested-parse::

   This module contains AWS SQS hook



Module Contents
---------------

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.amazon.aws.hooks.sqs.SqsHook




.. py:class:: SqsHook(*args, **kwargs)

   Bases: :py:obj:`airflow.providers.amazon.aws.hooks.base_aws.AwsBaseHook`

   Interact with Amazon Simple Queue Service.

   Additional arguments (such as ``aws_conn_id``) may be specified and
   are passed down to the underlying AwsBaseHook.

   .. seealso::
       :class:`~airflow.providers.amazon.aws.hooks.base_aws.AwsBaseHook`

   .. py:method:: create_queue(queue_name, attributes = None)

      Create queue using connection object

      :param queue_name: name of the queue.
      :param attributes: additional attributes for the queue (default: None)
          For details of the attributes parameter see :py:meth:`SQS.create_queue`

      :return: dict with the information about the queue
          For details of the returned value see :py:meth:`SQS.create_queue`
      :rtype: dict


   .. py:method:: send_message(queue_url, message_body, delay_seconds = 0, message_attributes = None, message_group_id = None)

      Send message to the queue

      :param queue_url: queue url
      :param message_body: the contents of the message
      :param delay_seconds: seconds to delay the message
      :param message_attributes: additional attributes for the message (default: None)
          For details of the attributes parameter see :py:meth:`botocore.client.SQS.send_message`
      :param message_group_id: This applies only to FIFO (first-in-first-out) queues. (default: None)
          For details of the attributes parameter see :py:meth:`botocore.client.SQS.send_message`

      :return: dict with the information about the message sent
          For details of the returned value see :py:meth:`botocore.client.SQS.send_message`
      :rtype: dict



