气流 <> 松弛

Airflow <> Slack

我刚开始学习 Airflow,我正在尝试创建一个小的 Airflow 脚本来向 Slack 发送通知,但不知何故它无法调用 Slack API。第一个任务工作正常。这是我使用的代码:

from airflow import DAG
from airflow.contrib.operators.bigquery_check_operator import BigQueryCheckOperator
from airflow.operators import BashOperator
from slackclient import SlackClient
from airflow.operators.slack_operator import SlackAPIPostOperator
from datetime import datetime, timedelta

default_args = {
    'owner': 'test',
    'depends_on_past': False,
    'start_date': datetime.today(),
    'email': ['test@test'],
    'email_on_failure': True,
    'email_on_retry': False,
    'retries': 4,
    'retry_delay': timedelta(minutes=5),
}

# Create the DAG
dag = DAG('slack_test',\
    default_args=default_args,\
    schedule_interval='15 * * * *')

final_check = BigQueryCheckOperator(
    task_id='bq_check_agg',
    sql='''
    #legacy sql
    SELECT
    max(date) as max_date
    FROM
    [test:test.test]
    WHERE date <= current_timestamp()
    ''',
    dag = dag)

    # slack notification
slack_notify = SlackAPIPostOperator(
    task_id='slack_notify',
    username  = 'Airflow',
    token='....',
    channel='#test-channel',
    text='ETL DONE!',
    dag=dag
)
slack_notify.set_upstream(final_check)

当我尝试测试 slack_notify 任务时,它失败了。这是我收到的错误:

airflow.exceptions.AirflowException: Slack API call failed (%s)

无法在线找到任何解决方案。松弛身份验证有问题吗?

已解决。我试图 post 在一个私人的松弛频道。使用 public one

效果很好

我认为您可以先邀请您的 Airflow 机器人进入您的私人频道,然后 slack 机器人可以 post 在该频道中发送消息。否则 slack 机器人找不到私人频道,它会引发 not_in_channel Slack API 错误。

使用 public 松弛通道,您不需要这样做,您将收到来自 Airflow 机器人的消息。

希望对您有所帮助。