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

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

.. autoapi-nested-parse::

   This module contains AWS CloudFormation Hook



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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.amazon.aws.hooks.cloud_formation.CloudFormationHook
   airflow.providers.amazon.aws.hooks.cloud_formation.AWSCloudFormationHook




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

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

   Interact with AWS CloudFormation.

   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:: get_stack_status(self, stack_name)

      Get stack status from CloudFormation.


   .. py:method:: create_stack(self, stack_name, cloudformation_parameters)

      Create stack in CloudFormation.

      :param stack_name: stack_name.
      :param cloudformation_parameters: parameters to be passed to CloudFormation.


   .. py:method:: delete_stack(self, stack_name, cloudformation_parameters = None)

      Delete stack in CloudFormation.

      :param stack_name: stack_name.
      :param cloudformation_parameters: parameters to be passed to CloudFormation (optional).



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

   Bases: :py:obj:`CloudFormationHook`

   This hook is deprecated.
   Please use :class:`airflow.providers.amazon.aws.hooks.cloud_formation.CloudFormationHook`.


