簡體   English   中英

Airflow DockerOperator 如何在 Docker 映像創建錯誤時發送通知

[英]How Airflow DockerOperator send notification when Docker image creation error

我想在 Airflow DockerOperator 無法創建 Docker 映像時發送通知。 如果 DockerOperator 執行錯誤,可以使用on_failure_callback發送通知。

更具體地說,我想捕獲 2 個錯誤。

  1. 私有 Docker 存儲庫未運行(10.11.12.13 在下面的示例中未運行)
  2. 執行服務器未運行(20.21.22.23:2345 在下面的示例中未運行)
from airflow import DAG
from datetime import datetime, timedelta
from airflow.providers.docker.operators.docker import DockerOperator

def send_slack():
    print('send error message')

default_args = {
    'on_failure_callback': send_slack,
}

with DAG(
    dag_id='test_dag',
    default_args=default_args,
    schedule_interval='45 * * * *',
    start_date=datetime(2021, 1, 1),
    catchup=False,
    dagrun_timeout=timedelta(minutes=420),
    concurrency=1,
    tags=['test']
) as dag:

    t = DockerOperator(
        task_id="test_operator",
        container_name="test_container",
        image=f"10.11.12.13/myapp:latest",
        force_pull=False,
        auto_remove=True,
        command = " python my_test.py ",
        docker_url="tcp://20.21.22.23:2375",
        cpus=1,
        mem_limit="1g",
        mount_tmp_dir=False
    )

    t

if __name__ == "__main__":
    dag.cli()

如果你想處理特定的錯誤,你需要查看 DockerOperator 的代碼並創建你自己的自定義操作符:

class MyCustomDockerOperator(DockerOperator):
    ... # here implement any customisations

您可以查看運算符的實現方式並覆蓋特定方法,捕獲特定異常並以您認為最適合您的方式處理它。

然后 - 在您的 DAG 中使用 MyCustomDockerOperator。 如果您想在多個 DAG 中使用它,您甚至可以將它添加到共享實用程序代碼中。

https://airflow.apache.org/docs/apache-airflow/stable/modules_management.html

根據Jarek的回答,我在下面實現了非常粗略的 CustomOperator。

class MyCustomDockerOperator(DockerOperator):
    def execute(self, context) -> Option[str]:
        try:
            super().execute(context)
        except AirflowException:
            raise
        except Exception as e:
            raise AirflowException('something is wrong in creating docker image.') from e

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM