:py:mod:`airflow.providers.amazon.aws.operators.step_function`
==============================================================

.. py:module:: airflow.providers.amazon.aws.operators.step_function


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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.amazon.aws.operators.step_function.StepFunctionStartExecutionOperator
   airflow.providers.amazon.aws.operators.step_function.StepFunctionGetExecutionOutputOperator




.. py:class:: StepFunctionStartExecutionOperator(*, state_machine_arn, name = None, state_machine_input = None, aws_conn_id = 'aws_default', region_name = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   An Operator that begins execution of an AWS Step Function State Machine.

   Additional arguments may be specified and are passed down to the underlying BaseOperator.

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

   :param state_machine_arn: ARN of the Step Function State Machine
   :param name: The name of the execution.
   :param state_machine_input: JSON data input to pass to the State Machine
   :param aws_conn_id: aws connection to uses
   :param do_xcom_push: if True, execution_arn is pushed to XCom with key execution_arn.

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['state_machine_arn', 'name', 'input']

      

   .. py:attribute:: template_ext
      :annotation: :Sequence[str] = []

      

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

      

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

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: StepFunctionGetExecutionOutputOperator(*, execution_arn, aws_conn_id = 'aws_default', region_name = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   An Operator that returns the output of an AWS Step Function State Machine execution.

   Additional arguments may be specified and are passed down to the underlying BaseOperator.

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

   :param execution_arn: ARN of the Step Function State Machine Execution
   :param aws_conn_id: aws connection to use, defaults to 'aws_default'

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

      

   .. py:attribute:: template_ext
      :annotation: :Sequence[str] = []

      

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

      

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

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



