使用airflow插件导入外部python函数

使用airflow插件导入外部python函数,python,airflow,Python,Airflow,在On\u failure\u callback上,我正在调用sns方法发送工作正常的通知。 我想将sns函数声明为使用气流插件的独立函数 import boto3 from airflow import DAG from airflow.operators import BashOperator from datetime import datetime, timedelta # t1, t2, t3 and t4 are examples of tasks created using op

On\u failure\u callback
上,我正在调用
sns
方法发送工作正常的通知。
我想将
sns
函数声明为使用气流插件的独立函数

import boto3
from airflow import DAG
from airflow.operators import BashOperator
from datetime import datetime, timedelta

# t1, t2, t3 and t4 are examples of tasks created using operators

def sns(state):
  client = boto3.client('sns',aws_access_key_id='abcd',aws_secret_access_key='abcd',region_name='us-east-1')
  response = client.publish(
    TargetArn='Topicarn',
    Message='Test')

t3 = BashOperator(
    task_id='task_3',
    bash_command='fail',
    on_failure_callback=sns,
    dag=dag)
谢谢,
Rajeev

(回复评论中发布的实际问题,请将问题移至原始问题)

  • 因为这基本上是一个通知操作符,所以您应该继承自
    BaseOperator
  • 插件文件夹通常位于项目的根目录中,靠近
    dag
    文件夹
  • 至于插件本身,一旦您从
    AirflowPlugin
    继承,它将可以作为
    airflow.operators.my_operator
    导入。您可以将其用作任何其他运算符

  • 以下代码适用于我:

    插件代码:

    import boto3
    from airflow.models import BaseOperator
    from airflow.plugins_manager import AirflowPlugin
    from airflow.utils.decorators import apply_defaults
    
    class snsoperator(BaseOperator):
      @apply_defaults
      def __init__(self, *args, **kwargs):
    
       super(snsoperator, self).__init__(*args, **kwargs)
    
      def __call__(self, *args, **kwargs):
        print("calling execute")
        client = boto3.client('sns', aws_access_key_id='abc',
                                  aws_secret_access_key='abc', region_name='us-east-1')
        response = client.publish(
                TargetArn='abc',
                Message='Test')
    
    class snsplugin(AirflowPlugin):
      name = "snsplugin"
      operators = [snsoperator]
    
    DAG代码:

    import boto3
    from airflow import DAG
    from airflow.operators import BashOperator
    from datetime import datetime, timedelta
    from airflow.operators.snsplugin import snsoperator
    
    t3 = BashOperator(
        task_id='task_3',
        bash_command='fail',
        on_failure_callback=snsoperator(task_id='sns'),
        dag=dag)
    

    你看过插件的官方文档了吗这里有一个很好的例子,你可以自己试试。如果您在执行此操作时遇到特定问题,那么您可以问一个更具体的问题。我已经阅读了官方文档。查找以下问题的答案:1.我应该使用哪个基类?2.我应该如何配置插件文件夹?您应该使用这些点更新原始问题。到时候会得到答复的。现在的方式太宽泛了