:py:mod:`airflow.providers.amazon.aws.sensors.cloud_formation`
==============================================================

.. py:module:: airflow.providers.amazon.aws.sensors.cloud_formation

.. autoapi-nested-parse::

   This module contains sensors for AWS CloudFormation.



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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.amazon.aws.sensors.cloud_formation.CloudFormationCreateStackSensor
   airflow.providers.amazon.aws.sensors.cloud_formation.CloudFormationDeleteStackSensor




.. py:class:: CloudFormationCreateStackSensor(*, stack_name, aws_conn_id='aws_default', region_name=None, **kwargs)

   Bases: :py:obj:`airflow.sensors.base.BaseSensorOperator`

   Waits for a stack to be created successfully on AWS CloudFormation.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudFormationCreateStackSensor`


   :param stack_name: The name of the stack to wait for (templated)
   :param aws_conn_id: ID of the Airflow connection where credentials and extra configuration are
       stored
   :param poke_interval: Time in seconds that the job should wait between each try

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['stack_name']

      

   .. py:attribute:: ui_color
      :annotation: = #C5CAE9

      

   .. py:method:: poke(self, context)

      Function that the sensors defined while deriving this class should
      override.


   .. py:method:: hook(self)

      Create and return an CloudFormationHook



.. py:class:: CloudFormationDeleteStackSensor(*, stack_name, aws_conn_id = 'aws_default', region_name = None, **kwargs)

   Bases: :py:obj:`airflow.sensors.base.BaseSensorOperator`

   Waits for a stack to be deleted successfully on AWS CloudFormation.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudFormationDeleteStackSensor`


   :param stack_name: The name of the stack to wait for (templated)
   :param aws_conn_id: ID of the Airflow connection where credentials and extra configuration are
       stored
   :param poke_interval: Time in seconds that the job should wait between each try

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['stack_name']

      

   .. py:attribute:: ui_color
      :annotation: = #C5CAE9

      

   .. py:method:: poke(self, context)

      Function that the sensors defined while deriving this class should
      override.


   .. py:method:: hook(self)

      Create and return an CloudFormationHook



