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

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

.. autoapi-nested-parse::

   This module contains Amazon EKS operators.



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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.amazon.aws.operators.eks.EksCreateClusterOperator
   airflow.providers.amazon.aws.operators.eks.EksCreateNodegroupOperator
   airflow.providers.amazon.aws.operators.eks.EksCreateFargateProfileOperator
   airflow.providers.amazon.aws.operators.eks.EksDeleteClusterOperator
   airflow.providers.amazon.aws.operators.eks.EksDeleteNodegroupOperator
   airflow.providers.amazon.aws.operators.eks.EksDeleteFargateProfileOperator
   airflow.providers.amazon.aws.operators.eks.EksPodOperator
   airflow.providers.amazon.aws.operators.eks.EKSCreateClusterOperator
   airflow.providers.amazon.aws.operators.eks.EKSCreateNodegroupOperator
   airflow.providers.amazon.aws.operators.eks.EKSCreateFargateProfileOperator
   airflow.providers.amazon.aws.operators.eks.EKSDeleteClusterOperator
   airflow.providers.amazon.aws.operators.eks.EKSDeleteNodegroupOperator
   airflow.providers.amazon.aws.operators.eks.EKSDeleteFargateProfileOperator
   airflow.providers.amazon.aws.operators.eks.EKSPodOperator




Attributes
~~~~~~~~~~

.. autoapisummary::

   airflow.providers.amazon.aws.operators.eks.CHECK_INTERVAL_SECONDS
   airflow.providers.amazon.aws.operators.eks.TIMEOUT_SECONDS
   airflow.providers.amazon.aws.operators.eks.DEFAULT_COMPUTE_TYPE
   airflow.providers.amazon.aws.operators.eks.DEFAULT_CONN_ID
   airflow.providers.amazon.aws.operators.eks.DEFAULT_FARGATE_PROFILE_NAME
   airflow.providers.amazon.aws.operators.eks.DEFAULT_NAMESPACE_NAME
   airflow.providers.amazon.aws.operators.eks.DEFAULT_NODEGROUP_NAME
   airflow.providers.amazon.aws.operators.eks.DEFAULT_POD_NAME
   airflow.providers.amazon.aws.operators.eks.ABORT_MSG
   airflow.providers.amazon.aws.operators.eks.CAN_NOT_DELETE_MSG
   airflow.providers.amazon.aws.operators.eks.MISSING_ARN_MSG
   airflow.providers.amazon.aws.operators.eks.SUCCESS_MSG
   airflow.providers.amazon.aws.operators.eks.SUPPORTED_COMPUTE_VALUES
   airflow.providers.amazon.aws.operators.eks.NODEGROUP_FULL_NAME
   airflow.providers.amazon.aws.operators.eks.FARGATE_FULL_NAME


.. py:data:: CHECK_INTERVAL_SECONDS
   :annotation: = 15

   

.. py:data:: TIMEOUT_SECONDS
   

   

.. py:data:: DEFAULT_COMPUTE_TYPE
   :annotation: = nodegroup

   

.. py:data:: DEFAULT_CONN_ID
   :annotation: = aws_default

   

.. py:data:: DEFAULT_FARGATE_PROFILE_NAME
   :annotation: = profile

   

.. py:data:: DEFAULT_NAMESPACE_NAME
   :annotation: = default

   

.. py:data:: DEFAULT_NODEGROUP_NAME
   :annotation: = nodegroup

   

.. py:data:: DEFAULT_POD_NAME
   :annotation: = pod

   

.. py:data:: ABORT_MSG
   :annotation: = {compute} are still active after the allocated time limit.  Aborting.

   

.. py:data:: CAN_NOT_DELETE_MSG
   :annotation: = A cluster can not be deleted with attached {compute}.  Deleting {count} {compute}.

   

.. py:data:: MISSING_ARN_MSG
   :annotation: = Creating an {compute} requires {requirement} to be passed in.

   

.. py:data:: SUCCESS_MSG
   :annotation: = No {compute} remain, deleting cluster.

   

.. py:data:: SUPPORTED_COMPUTE_VALUES
   

   

.. py:data:: NODEGROUP_FULL_NAME
   :annotation: = Amazon EKS managed node groups

   

.. py:data:: FARGATE_FULL_NAME
   :annotation: = AWS Fargate profiles

   

.. py:class:: EksCreateClusterOperator(cluster_name, cluster_role_arn, resources_vpc_config, compute = DEFAULT_COMPUTE_TYPE, create_cluster_kwargs = None, nodegroup_name = DEFAULT_NODEGROUP_NAME, nodegroup_role_arn = None, create_nodegroup_kwargs = None, fargate_profile_name = DEFAULT_FARGATE_PROFILE_NAME, fargate_pod_execution_role_arn = None, fargate_selectors = None, create_fargate_profile_kwargs = None, aws_conn_id = DEFAULT_CONN_ID, region = None, **kwargs)

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

   Creates an Amazon EKS Cluster control plane.

   Optionally, can also create the supporting compute architecture:

    - If argument 'compute' is provided with a value of 'nodegroup', will also
        attempt to create an Amazon EKS Managed Nodegroup for the cluster.
        See :class:`~airflow.providers.amazon.aws.operators.EksCreateNodegroupOperator`
        documentation for requirements.

   -  If argument 'compute' is provided with a value of 'fargate', will also attempt to create an AWS
        Fargate profile for the cluster.
        See :class:`~airflow.providers.amazon.aws.operators.EksCreateFargateProfileOperator`
        documentation for requirements.


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

   :param cluster_name: The unique name to give to your Amazon EKS Cluster. (templated)
   :param cluster_role_arn: The Amazon Resource Name (ARN) of the IAM role that provides permissions for the
        Kubernetes control plane to make calls to AWS API operations on your behalf. (templated)
   :param resources_vpc_config: The VPC configuration used by the cluster control plane. (templated)
   :param compute: The type of compute architecture to generate along with the cluster. (templated)
        Defaults to 'nodegroup' to generate an EKS Managed Nodegroup.
   :param create_cluster_kwargs: Optional parameters to pass to the CreateCluster API (templated)
   :param aws_conn_id: The Airflow connection used for AWS credentials. (templated)
        If this is None or empty then the default boto3 behaviour is used. If
        running Airflow in a distributed manner and aws_conn_id is None or
        empty, then the default boto3 configuration would be used (and must be
        maintained on each worker node).
   :param region: Which AWS region the connection should use. (templated)
        If this is None or empty then the default boto3 behaviour is used.

   If compute is assigned the value of 'nodegroup':

   :param nodegroup_name: *REQUIRED* The unique name to give your Amazon EKS managed node group. (templated)
   :param nodegroup_role_arn: *REQUIRED* The Amazon Resource Name (ARN) of the IAM role to associate with
        the Amazon EKS managed node group. (templated)
   :param create_nodegroup_kwargs: Optional parameters to pass to the CreateNodegroup API (templated)


   If compute is assigned the value of 'fargate':

   :param fargate_profile_name: *REQUIRED* The unique name to give your AWS Fargate profile. (templated)
   :param fargate_pod_execution_role_arn: *REQUIRED* The Amazon Resource Name (ARN) of the pod execution
        role to use for pods that match the selectors in the AWS Fargate profile. (templated)
   :param fargate_selectors: The selectors to match for pods to use this AWS Fargate profile. (templated)
   :param create_fargate_profile_kwargs: Optional parameters to pass to the CreateFargateProfile API
        (templated)


   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['cluster_name', 'cluster_role_arn', 'resources_vpc_config', 'create_cluster_kwargs', 'compute',...

      

   .. 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:: EksCreateNodegroupOperator(cluster_name, nodegroup_subnets, nodegroup_role_arn, nodegroup_name = DEFAULT_NODEGROUP_NAME, create_nodegroup_kwargs = None, aws_conn_id = DEFAULT_CONN_ID, region = None, **kwargs)

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

   Creates an Amazon EKS managed node group for an existing Amazon EKS Cluster.

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

   :param cluster_name: The name of the Amazon EKS Cluster to create the managed nodegroup in. (templated)
   :param nodegroup_name: The unique name to give your managed nodegroup. (templated)
   :param nodegroup_subnets:
        The subnets to use for the Auto Scaling group that is created for the managed nodegroup. (templated)
   :param nodegroup_role_arn:
        The Amazon Resource Name (ARN) of the IAM role to associate with the managed nodegroup. (templated)
   :param create_nodegroup_kwargs: Optional parameters to pass to the Create Nodegroup API (templated)
   :param aws_conn_id: The Airflow connection used for AWS credentials. (templated)
        If this is None or empty then the default boto3 behaviour is used. If
        running Airflow in a distributed manner and aws_conn_id is None or
        empty, then the default boto3 configuration would be used (and must be
        maintained on each worker node).
   :param region: Which AWS region the connection should use. (templated)
       If this is None or empty then the default boto3 behaviour is used.


   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['cluster_name', 'nodegroup_subnets', 'nodegroup_role_arn', 'nodegroup_name',...

      

   .. 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:: EksCreateFargateProfileOperator(cluster_name, pod_execution_role_arn, selectors, fargate_profile_name = DEFAULT_FARGATE_PROFILE_NAME, create_fargate_profile_kwargs = None, aws_conn_id = DEFAULT_CONN_ID, region = None, **kwargs)

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

   Creates an AWS Fargate profile for an Amazon EKS cluster.

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

   :param cluster_name: The name of the Amazon EKS cluster to apply the AWS Fargate profile to. (templated)
   :param pod_execution_role_arn: The Amazon Resource Name (ARN) of the pod execution role to
        use for pods that match the selectors in the AWS Fargate profile. (templated)
   :param selectors: The selectors to match for pods to use this AWS Fargate profile. (templated)
   :param fargate_profile_name: The unique name to give your AWS Fargate profile. (templated)
   :param create_fargate_profile_kwargs: Optional parameters to pass to the CreateFargate Profile API
    (templated)

   :param aws_conn_id: The Airflow connection used for AWS credentials. (templated)
        If this is None or empty then the default boto3 behaviour is used. If
        running Airflow in a distributed manner and aws_conn_id is None or
        empty, then the default boto3 configuration would be used (and must be
        maintained on each worker node).
   :param region: Which AWS region the connection should use. (templated)
       If this is None or empty then the default boto3 behaviour is used.

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['cluster_name', 'pod_execution_role_arn', 'selectors', 'fargate_profile_name',...

      

   .. 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:: EksDeleteClusterOperator(cluster_name, force_delete_compute = False, aws_conn_id = DEFAULT_CONN_ID, region = None, **kwargs)

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

   Deletes the Amazon EKS Cluster control plane and all nodegroups attached to it.

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

   :param cluster_name: The name of the Amazon EKS Cluster to delete. (templated)
   :param force_delete_compute: If True, will delete any attached resources. (templated)
        Defaults to False.
   :param aws_conn_id: The Airflow connection used for AWS credentials. (templated)
        If this is None or empty then the default boto3 behaviour is used. If
        running Airflow in a distributed manner and aws_conn_id is None or
        empty, then the default boto3 configuration would be used (and must be
        maintained on each worker node).
   :param region: Which AWS region the connection should use. (templated)
       If this is None or empty then the default boto3 behaviour is used.


   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['cluster_name', 'force_delete_compute', 'aws_conn_id', 'region']

      

   .. 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:method:: delete_any_nodegroups(self, eks_hook)

      Deletes all Amazon EKS managed node groups for a provided Amazon EKS Cluster.

      Amazon EKS managed node groups can be deleted in parallel, so we can send all
      of the delete commands in bulk and move on once the count of nodegroups is zero.


   .. py:method:: delete_any_fargate_profiles(self, eks_hook)

      Deletes all EKS Fargate profiles for a provided Amazon EKS Cluster.

      EKS Fargate profiles must be deleted one at a time, so we must wait
      for one to be deleted before sending the next delete command.



.. py:class:: EksDeleteNodegroupOperator(cluster_name, nodegroup_name, aws_conn_id = DEFAULT_CONN_ID, region = None, **kwargs)

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

   Deletes an Amazon EKS managed node group from an Amazon EKS Cluster.

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

   :param cluster_name: The name of the Amazon EKS Cluster associated with your nodegroup. (templated)
   :param nodegroup_name: The name of the nodegroup to delete. (templated)
   :param aws_conn_id: The Airflow connection used for AWS credentials. (templated)
        If this is None or empty then the default boto3 behaviour is used.  If
        running Airflow in a distributed manner and aws_conn_id is None or
        empty, then the default boto3 configuration would be used (and must be
        maintained on each worker node).
   :param region: Which AWS region the connection should use. (templated)
       If this is None or empty then the default boto3 behaviour is used.


   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['cluster_name', 'nodegroup_name', 'aws_conn_id', 'region']

      

   .. 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:: EksDeleteFargateProfileOperator(cluster_name, fargate_profile_name, aws_conn_id = DEFAULT_CONN_ID, region = None, **kwargs)

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

   Deletes an AWS Fargate profile from an Amazon EKS Cluster.

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

   :param cluster_name: The name of the Amazon EKS cluster associated with your Fargate profile. (templated)
   :param fargate_profile_name: The name of the AWS Fargate profile to delete. (templated)
   :param aws_conn_id: The Airflow connection used for AWS credentials. (templated)
        If this is None or empty then the default boto3 behaviour is used.  If
        running Airflow in a distributed manner and aws_conn_id is None or
        empty, then the default boto3 configuration would be used (and must be
        maintained on each worker node).
   :param region: Which AWS region the connection should use. (templated)
       If this is None or empty then the default boto3 behaviour is used.

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['cluster_name', 'fargate_profile_name', 'aws_conn_id', 'region']

      

   .. 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:: EksPodOperator(cluster_name, in_cluster = False, namespace = DEFAULT_NAMESPACE_NAME, pod_context = None, pod_name = None, pod_username = None, aws_conn_id = DEFAULT_CONN_ID, region = None, is_delete_operator_pod = None, **kwargs)

   Bases: :py:obj:`airflow.providers.cncf.kubernetes.operators.kubernetes_pod.KubernetesPodOperator`

   Executes a task in a Kubernetes pod on the specified Amazon EKS Cluster.

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

   :param cluster_name: The name of the Amazon EKS Cluster to execute the task on. (templated)
   :param cluster_role_arn: The Amazon Resource Name (ARN) of the IAM role that provides permissions
        for the Kubernetes control plane to make calls to AWS API operations on your behalf. (templated)
   :param in_cluster: If True, look for config inside the cluster; if False look for a local file path.
   :param namespace: The namespace in which to execute the pod. (templated)
   :param pod_name: The unique name to give the pod. (templated)
   :param aws_profile: The named profile containing the credentials for the AWS CLI tool to use.
   :param aws_profile: str
   :param region: Which AWS region the connection should use. (templated)
        If this is None or empty then the default boto3 behaviour is used.
   :param aws_conn_id: The Airflow connection used for AWS credentials. (templated)
        If this is None or empty then the default boto3 behaviour is used. If
        running Airflow in a distributed manner and aws_conn_id is None or
        empty, then the default boto3 configuration would be used (and must be
        maintained on each worker node).
   :param is_delete_operator_pod: What to do when the pod reaches its final
       state, or the execution is interrupted. If True, delete the
       pod; if False, leave the pod.  Current default is False, but this will be
       changed in the next major release of this provider.


   .. py:attribute:: template_fields
      :annotation: :Sequence[str]

      

   .. 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:: EKSCreateClusterOperator(*args, **kwargs)

   Bases: :py:obj:`EksCreateClusterOperator`

   This operator is deprecated.
   Please use :class:`airflow.providers.amazon.aws.operators.eks.EksCreateClusterOperator`.


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

   Bases: :py:obj:`EksCreateNodegroupOperator`

   This operator is deprecated.
   Please use :class:`airflow.providers.amazon.aws.operators.eks.EksCreateNodegroupOperator`.


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

   Bases: :py:obj:`EksCreateFargateProfileOperator`

   This operator is deprecated.
   Please use :class:`airflow.providers.amazon.aws.operators.eks.EksCreateFargateProfileOperator`.


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

   Bases: :py:obj:`EksDeleteClusterOperator`

   This operator is deprecated.
   Please use :class:`airflow.providers.amazon.aws.operators.eks.EksDeleteClusterOperator`.


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

   Bases: :py:obj:`EksDeleteNodegroupOperator`

   This operator is deprecated.
   Please use :class:`airflow.providers.amazon.aws.operators.eks.EksDeleteNodegroupOperator`.


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

   Bases: :py:obj:`EksDeleteFargateProfileOperator`

   This operator is deprecated.
   Please use :class:`airflow.providers.amazon.aws.operators.eks.EksDeleteFargateProfileOperator`.


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

   Bases: :py:obj:`EksPodOperator`

   This operator is deprecated.
   Please use :class:`airflow.providers.amazon.aws.operators.eks.EksPodOperator`.


