เจธเจพเจกเฉ เจตเจฟเจฆเจฟเจ เจ เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจจเฉเฉฐ เจคเจฟเจเจฐ เจเจฐเจฆเฉ เจธเจฎเฉเจ, เจธเจพเจจเฉเฉฐ เจธเจฎเฉเจ-เจธเจฎเฉเจ 'เจคเฉ เจเฉเจ เจธเจพเจงเจจเจพเจ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจ เจฆเฉ เจฎเจพเจฎเจฒเฉ เจตเจฟเฉฑเจ เจฎเฉเจธเจผเจเจฒเจพเจ เจฆเจพ เจธเจพเจนเจฎเจฃเจพ เจเจฐเจจเจพ เจชเฉเจเจฆเจพ เจนเฉเฅค เจ เจคเฉ เจเจธ เจธเจฎเฉเจ เจเจฆเฉเจ เจ เจธเฉเจ เจเจนเจจเจพเจ เจฆเจพ เจธเจพเจนเจฎเจฃเจพ เจเจฐเจฆเฉ เจนเจพเจ, เจเฉฑเจฅเฉ เจนเจฎเฉเจธเจผเจพ เจฒเฉเฉเฉเจเจฆเฉ เจฆเจธเจคเจพเจตเฉเจเจผ เจ เจคเฉ เจฒเฉเจ เจจเจนเฉเจ เจนเฉเฉฐเจฆเฉ เจนเจจ เจเฉ เจเจธ เจธเจฎเฉฑเจธเจฟเจ เจจเจพเจฒ เจธเจฟเฉฑเจเจฃ เจตเจฟเฉฑเจ เจธเจพเจกเฉ เจฎเจฆเจฆ เจเจฐเจจเจเฉเฅค
เจเจน เจฎเจพเจฎเจฒเจพ เจธเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, 2015 เจตเจฟเฉฑเจ, เจ
เจคเฉ "เจฌเจฟเจ เจกเฉเจเจพ เจธเจชเฉเจธเจผเจฒเจฟเจธเจ" เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฆเฉ เจฆเฉเจฐเจพเจจ เจ
เจธเฉเจ 35 เจเฉฑเจเฉ เจธเจฎเฉเจ เจฆเฉ เจเจชเจญเฉเจเจคเจพเจตเจพเจ เจฒเจ เจธเจชเจพเจฐเจ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจนเฉเจกเฉเจช เจเจฒเฉฑเจธเจเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเฉเจคเฉเฅค เจเจน เจธเจชเฉฑเจธเจผเจ เจจเจนเฉเจ เจธเฉ เจเจฟ เจฏเจพเจฐเจจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเจธ เจจเฉเฉฐ เจ
เจเจฟเจนเฉ เจตเจฐเจคเฉเจ เจฆเฉ เจเฉเจธ เจฒเจ เจเจฟเจตเฉเจ เจคเจฟเจเจฐ เจเจฐเจจเจพ เจนเฉเฅค เจ
เฉฐเจค เจตเจฟเฉฑเจ, เจเจธเจฆเจพ เจชเจคเจพ เจฒเจเจพ เจเฉ เจ
เจคเฉ เจเจชเจฃเฉ เจเจช เจนเฉ เจฐเจธเจคเฉ เจคเฉ เจเฉฑเจฒเจฆเฉ เจนเฉเจ, เจ
เจธเฉเจ เจเฉเจคเจพ
prehistory
เจเจธ เจตเจพเจฐ เจ
เจธเฉเจ เจเฉฑเจ เจตเฉฑเจเจฐเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฌเจพเจฐเฉ เจเฉฑเจฒ เจเจฐเจพเจเจเฉ-
เจธเจญ เจเฉเจ เจเจฎ เจคเฉเจฐ 'เจคเฉ เจเฉฐเจเจพ เจนเฉ. เจเจจเฉเจนเจพเจ เจจเฉเฉฐ เจเจชเจฃเฉเจเจ เจชเจพเจเจชเจฒเจพเจเจจเจพเจ เจฌเจฃเจพเจเจฃ เจฆเจฟเจเฅค เจนเจพเจฒเจพเจเจเจฟ, เจเฉฑเจฅเฉ เจเฉฑเจ "เจชเจฐ" เจนเฉ: เจธเจพเจกเฉ เจธเจพเจฐเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจธเจฟเฉฑเจเจฃ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฆเฉ เจฆเฉเจฐเจฟเจธเจผเจเฉเจเฉเจฃ เจคเฉเจ เจคเจเจจเฉเจเฉ เจคเฉเจฐ 'เจคเฉ เจเฉฑเจจเจค เจนเจจเฅค เจชเฉเจฐเจฏเฉเจเจธเจผเจพเจฒเจพ เจฆเฉ เจเจพเจเจ เจเจฐเจจ เจฒเจ, เจ เจธเฉเจ เจเจเฉเจฎเฉเจเจฟเจ เจเฉเจเจฐเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจ: เจญเจพเจเฉเจฆเจพเจฐ เจจเฉเฉฐ เจเจชเจฃเฉ เจจเจฟเฉฑเจเฉ เจเจพเจคเฉ 'เจคเฉ เจเจพเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉ, "เจเฉเฉฑเจ" เจฌเจเจจ 'เจคเฉ เจเจฒเจฟเฉฑเจ เจเจฐเฉ, เจ เจคเฉ เจเฉเจ เจธเจฎเฉเจ เจฌเจพเจ เจฆ เจเจธ เจจเฉ เจเฉ เจเฉเจคเจพ เจเจธ 'เจคเฉ เจเจฟเจธเฉ เจเจฟเจธเจฎ เจฆเจพ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจซเฉเจกเจฌเฉเจ เจฆเฉเจเจฆเจพ เจนเฉเฅค เจ เจคเฉ เจเจน เจเจธ เจชเจฒ 'เจคเฉ เจนเฉ เจเจฟ เจ เจธเฉเจ เจเจชเจฃเฉ เจธเจฎเฉฑเจธเจฟเจ เจตเฉฑเจฒ เจเจพเจฃเจพ เจธเจผเฉเจฐเฉ เจเจฐเจฆเฉ เจนเจพเจ.
เจเจธ เจฒเฉเจฌ เจฆเฉ เจคเจธเจฆเฉเจ เจเจธ เจคเจฐเฉเจนเจพเจ เจเฉเจคเฉ เจเจ เจนเฉ: เจ เจธเฉเจ เจญเจพเจเฉเจฆเจพเจฐ เจฆเฉ เจเจพเจซเจเจพ เจจเฉเฉฐ เจเฉฑเจ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจกเฉเจเจพ เจชเฉเจเฉเจ เจญเฉเจเจฆเฉ เจนเจพเจ, เจซเจฟเจฐ เจเฉเจฌเจฒเจฟเจจ เจเจธ เจกเฉเจเจพ เจชเฉเจเฉเจ เจจเฉเฉฐ HDFS เจตเจฟเฉฑเจ เจเฉเจฐเจพเจเจธเจซเจฐ เจเจฐเจฆเจพ เจนเฉ, เจซเจฟเจฐ เจเจ เจฐเจซเจฒเฉ เจเจธ เจกเฉเจเจพ เจชเฉเจเฉเจ เจจเฉเฉฐ เจฒเฉเจเจฆเจพ เจนเฉ เจ เจคเฉ เจเจธเจจเฉเฉฐ เจเจฒเจฟเจเจนเจพเจเจธ เจตเจฟเฉฑเจ เจฐเฉฑเจเจฆเจพ เจนเฉเฅค เจเจพเจฒ เจเจน เจนเฉ เจเจฟ เจเจ เจฐเจซเจฒเฉ เจจเฉเฉฐ เจเจน เจ เจธเจฒ เจธเจฎเฉเจ เจตเจฟเฉฑเจ เจจเจนเฉเจ เจเจฐเจจเจพ เจชเฉเจเจฆเจพ, เจเจน เจเฉฑเจ เจ เจจเฉเจธเฉเจเฉ เจฆเฉ เจ เจจเฉเจธเจพเจฐ เจเจฐเจฆเจพ เจนเฉ: เจนเจฐ 15 เจฎเจฟเฉฐเจ เจตเจฟเฉฑเจ เจเจน เจซเจพเจเจฒเจพเจ เจฆเจพ เจเฉฑเจ เจธเจฎเฉเจน เจฒเฉเจเจฆเจพ เจนเฉ เจ เจคเฉ เจเจนเจจเจพเจ เจจเฉเฉฐ เจ เจชเจฒเฉเจก เจเจฐเจฆเจพ เจนเฉเฅค
เจเจน เจชเจคเจพ เจเจฒเจฆเจพ เจนเฉ เจเจฟ เจธเจพเจจเฉเฉฐ เจเจชเจฃเฉ เจฌเฉเจจเจคเฉ 'เจคเฉ เจเจจเฉเจนเจพเจ เจฆเฉ เจกเฉเจเจเฉ เจจเฉเฉฐ เจเจชเจฃเฉ เจเจช เจเจฐเจฟเฉฑเจเจฐ เจเจฐเจจ เจฆเฉ เจเจผเจฐเฉเจฐเจค เจนเฉ เจเจฆเฉเจ เจเจฟ เจเฉเจเจฐ เจเฉฑเจฅเฉ เจ
เจคเฉ เจนเฉเจฃ เจเฉฑเจฒ เจฐเจฟเจนเจพ เจนเฉเฅค เจเฉเจเจฒเจฟเฉฐเจ เจคเฉเจ เจฌเจพเจ
เจฆ, เจธเจพเจจเฉเฉฐ เจชเจคเจพ เจฒเฉฑเจเจพ เจเจฟ เจเจ
เจฐเจซเจฒเฉ เจฆเฉ เจฌเจพเจ
เจฆ เจฆเฉ เจธเฉฐเจธเจเจฐเจฃเจพเจ เจฒเจ เจเฉฑเจ เจ
เจเฉเจคเฉ เจนเฉ experimental
, เจฌเฉเจธเจผเจ, เจเจน เจกเจฐเจพเจเจฃเจพ เจฒเฉฑเจเจฆเจพ เจนเฉ, เจชเจฐ เจเฉ เจเจฐเฉเจ... เจ
เจเจพเจจเจ เจเจน เจฌเฉฐเจฆ เจนเฉ เจเจพเจเจฆเจพ เจนเฉเฅค
เจ เฉฑเจเฉ, เจ เจธเฉเจ เจชเฉเจฐเฉ เจฎเจพเจฐเจ เจฆเจพ เจตเจฐเจฃเจจ เจเจฐเจพเจเจเฉ: เจเจ เจฐเจซเจฒเฉ เจจเฉเฉฐ เจธเจฅเจพเจชเจฟเจค เจเจฐเจจ เจคเฉเจ เจฒเฉ เจเฉ เจเฉฑเจ POST เจฌเฉเจจเจคเฉ เจคเจฟเจเจฐ เจเจฐเจจ เจคเฉฑเจ เจเฉ เจชเฉเจฐเจฏเฉเจเจพเจคเจฎเจ API เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ DAG เจจเฉเฉฐ เจเจพเจฒเฉ เจเจฐเจฆเจพ เจนเฉเฅค เจ เจธเฉเจ เจเจฌเฉฐเจเฉ 16.04 เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจพเจเจเฉเฅค
1. เจเจ เจฐเจซเจฒเฉ เจธเจฅเจพเจชเจจเจพ
เจเจฒเฉ เจเจพเจเจ เจเจฐเฉเจ เจเจฟ เจธเจพเจกเฉ เจเฉเจฒ Python 3 เจ เจคเฉ virtualenv เจนเฉเฅค
$ python3 --version
Python 3.6.6
$ virtualenv --version
15.2.0
เจเฉเจเจฐ เจเจธ เจตเจฟเฉฑเจเฉเจ เจเฉเจ เจเฉเฉฐเจฎ เจนเฉ, เจคเจพเจ เจเจธเจจเฉเฉฐ เจธเจฅเจพเจชเจฟเจค เจเจฐเฉเฅค
เจเจ เจนเฉเจฃ เจเฉฑเจ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจฌเจฃเจพเจเจ เจเจฟเจธ เจตเจฟเฉฑเจ เจ เจธเฉเจ เจเจ เจฐเจซเจฒเฉ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจเจพ เจเจพเจฐเฉ เจฐเฉฑเจเจพเจเจเฉเฅค
$ mkdir <your name of directory>
$ cd /path/to/your/new/directory
$ virtualenv -p which python3 venv
$ source venv/bin/activate
(venv) $
เจเจ เจฐเจซเจฒเฉ เจธเจฅเจพเจชเจฟเจค เจเจฐเฉ:
(venv) $ pip install airflow
เจตเจฐเจเจจ เจเจฟเจธ 'เจคเฉ เจ เจธเฉเจ เจเฉฐเจฎ เจเฉเจคเจพ เจนเฉ: 1.10.
เจนเฉเจฃ เจธเจพเจจเฉเฉฐ เจเฉฑเจ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจฌเจฃเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ airflow_home
, เจเจฟเฉฑเจฅเฉ DAG เจซเจพเจเจฒเจพเจ เจ
เจคเฉ เจเจ
เจฐเจซเจฒเฉ เจชเจฒเฉฑเจเจเจจ เจธเจฅเจฟเจค เจนเฉเจฃเจเฉเฅค เจกเจพเจเจฐเฉเจเจเจฐเฉ เจฌเจฃเจพเจเจฃ เจคเฉเจ เจฌเจพเจ
เจฆ, เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉเจฐเฉเจเจฌเจฒ เจธเฉเฉฑเจ เจเจฐเฉ AIRFLOW_HOME
.
(venv) $ cd /path/to/my/airflow/workspace
(venv) $ mkdir airflow_home
(venv) $ export AIRFLOW_HOME=<path to airflow_home>
เจ เจเจฒเจพ เจเจฆเจฎ เจเฉฑเจ เจเจฎเจพเจเจก เจเจฒเจพเจเจฃเจพ เจนเฉ เจเฉ SQLite เจตเจฟเฉฑเจ เจเฉฑเจ เจกเฉเจเจพเจซเจฒเฉ เจกเฉเจเจพเจฌเฉเจธ เจฌเจฃเจพเจ เจ เจคเฉ เจธเจผเฉเจฐเฉ เจเจฐเฉเจเจพ:
(venv) $ airflow initdb
เจตเจฟเฉฑเจ เจกเจพเจเจพเจฌเฉเจธ เจฌเจฃเจพเจเจ เจเจพเจตเฉเจเจพ airflow.db
เจฎเฉเจฒ.
เจเจฒเฉ เจเจพเจเจ เจเจฐเฉเจ เจเจฟ เจเฉ เจเจ เจฐเจซเจฒเฉ เจธเจฅเจพเจชเจฟเจค เจนเฉ:
$ airflow version
[2018-11-26 19:38:19,607] {__init__.py:57} INFO - Using executor SequentialExecutor
[2018-11-26 19:38:19,745] {driver.py:123} INFO - Generating grammar tables from /usr/lib/python3.6/lib2to3/Grammar.txt
[2018-11-26 19:38:19,771] {driver.py:123} INFO - Generating grammar tables from /usr/lib/python3.6/lib2to3/PatternGrammar.txt
____________ _____________
____ |__( )_________ __/__ /________ __
____ /| |_ /__ ___/_ /_ __ /_ __ _ | /| / /
___ ___ | / _ / _ __/ _ / / /_/ /_ |/ |/ /
_/_/ |_/_/ /_/ /_/ /_/ ____/____/|__/
v1.10.0
เจเฉเจเจฐ เจเจฎเจพเจเจก เจเฉฐเจฎ เจเจฐเจฆเฉ เจนเฉ, เจคเจพเจ เจเจ
เจฐเจซเจฒเฉ เจจเฉ เจเจชเจฃเฉ เจธเฉฐเจฐเจเจจเจพ เจซเจพเจเจฒ เจฌเจฃเจพเจ เจนเฉ airflow.cfg
ะฒ AIRFLOW_HOME
:
$ tree
.
โโโ airflow.cfg
โโโ unittests.cfg
เจเจ เจฐเจซเจฒเฉ เจฆเจพ เจเฉฑเจ เจตเฉเฉฑเจฌ เจเฉฐเจเจฐเจซเฉเจธ เจนเฉเฅค เจเจน เจเจฎเจพเจเจก เจเจฒเจพ เจเฉ เจฒเจพเจเจ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉ:
(venv) $ airflow webserver --port 8081
เจคเฉเจธเฉเจ เจนเฉเจฃ เจนเฉเจธเจ 'เจคเฉ เจชเฉเจฐเจ 8081 'เจคเฉ เจฌเฉเจฐเจพเจเจเจผเจฐ เจตเจฟเฉฑเจ เจตเฉเจฌ เจเฉฐเจเจฐเจซเฉเจธ เจจเฉเฉฐ เจนเจฟเฉฑเจ เจเจฐ เจธเจเจฆเฉ เจนเฉ เจเจฟเฉฑเจฅเฉ เจเจ
เจฐเจซเจฒเฉ เจเฉฑเจฒ เจฐเจฟเจนเจพ เจธเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ: <hostname:8081>
.
2. เจชเฉเจฐเจฏเฉเจเจพเจคเจฎเจ API เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจเจพ
เจเจธ เจธเจฎเฉเจ, เจเจ
เจฐเจซเจฒเฉ เจเฉเจเจซเจฟเจเจฐ เจเฉเจคเจพ เจเจฟเจ เจนเฉ เจ
เจคเฉ เจเจพเจฃ เจฒเจ เจคเจฟเจเจฐ เจนเฉเฅค เจนเจพเจฒเจพเจเจเจฟ, เจธเจพเจจเฉเฉฐ เจชเฉเจฐเจฏเฉเจเจพเจคเจฎเจ API เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฆเฉ เจตเฉ เจฒเฉเฉ เจนเฉเฅค เจธเจพเจกเฉ เจเฉเจเจฐ เจชเจพเจเจฅเจจ เจตเจฟเฉฑเจ เจฒเจฟเจเฉ เจเจ เจนเจจ, เจเจธเจฒเจ เจ
เฉฑเจเฉ เจธเจพเจฐเฉเจเจ เจฌเฉเจจเจคเฉเจเจ เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเจธ เจตเจฟเฉฑเจ เจนเฉเจฃเจเฉเจเจ requests
.
เจตเจพเจธเจคเจต เจตเจฟเฉฑเจ, API เจชเจนเจฟเจฒเจพเจ เจนเฉ เจธเจงเจพเจฐเจจ เจฌเฉเจจเจคเฉเจเจ เจฒเจ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉ. เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเจน เจฌเฉเจจเจคเฉ เจคเฉเจนเจพเจจเฉเฉฐ เจเจธเจฆเฉ เจธเฉฐเจเจพเจฒเจจ เจฆเฉ เจเจพเจเจ เจเจฐเจจ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเฉ เจนเฉ:
>>> import requests
>>> host = <your hostname>
>>> airflow_port = 8081 #ะฒ ะฝะฐัะตะผ ัะปััะฐะต ัะฐะบะพะน, ะฐ ะฟะพ ะดะตัะพะปัั 8080
>>> requests.get('http://{}:{}/{}'.format(host, airflow_port, 'api/experimental/test').text
'OK'
เจเฉเจเจฐ เจคเฉเจนเจพเจจเฉเฉฐ เจเจตเจพเจฌ เจตเจฟเฉฑเจ เจ เจเจฟเจนเจพ เจธเฉเจจเฉเจนเจพ เจฎเจฟเจฒเจฆเจพ เจนเฉ, เจคเจพเจ เจเจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉ เจเจฟ เจธเจญ เจเฉเจ เจเฉฐเจฎ เจเจฐ เจฐเจฟเจนเจพ เจนเฉเฅค
เจนเจพเจฒเจพเจเจเจฟ, เจเจฆเฉเจ เจ เจธเฉเจ เจเฉฑเจ DAG เจจเฉเฉฐ เจเจพเจฒเฉ เจเจฐเจจเจพ เจเจพเจนเฉเฉฐเจฆเฉ เจนเจพเจ, เจคเจพเจ เจธเจพเจจเฉเฉฐ เจเจธ เจคเฉฑเจฅ เจฆเจพ เจธเจพเจนเจฎเจฃเจพ เจเจฐเจจเจพ เจชเฉเจเจฆเจพ เจนเฉ เจเจฟ เจเจธ เจเจฟเจธเจฎ เจฆเฉ เจฌเฉเจจเจคเฉ เจชเฉเจฐเจฎเจพเจฃเจฟเจเจคเจพ เจคเฉเจ เจฌเจฟเจจเจพเจ เจจเจนเฉเจ เจเฉเจคเฉ เจเจพ เจธเจเจฆเฉเฅค
เจ เจเจฟเจนเจพ เจเจฐเจจ เจฒเจ, เจคเฉเจนเจพเจจเฉเฉฐ เจเจ เจนเฉเจฐ เจเจฆเจฎ เจเฉเฉฑเจเจฃเฉ เจชเฉเจฃเจเฉเฅค
เจชเจนเจฟเจฒเจพเจ, เจคเฉเจนเจพเจจเฉเฉฐ เจเจธเจจเฉเฉฐ เจธเฉฐเจฐเจเจจเจพ เจตเจฟเฉฑเจ เจเฉเฉเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ:
[api]
auth_backend = airflow.contrib.auth.backends.password_auth
เจซเจฟเจฐ, เจคเฉเจนเจพเจจเฉเฉฐ เจเจชเจฃเฉ เจเจชเจญเฉเจเจคเจพ เจจเฉเฉฐ เจชเฉเจฐเจฌเฉฐเจงเจ เจ เจงเจฟเจเจพเจฐเจพเจ เจจเจพเจฒ เจฌเจฃเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ:
>>> import airflow
>>> from airflow import models, settings
>>> from airflow.contrib.auth.backends.password_auth import PasswordUser
>>> user = PasswordUser(models.Admin())
>>> user.username = 'new_user_name'
>>> user.password = 'set_the_password'
>>> session = settings.Session()
>>> session.add(user)
>>> session.commit()
>>> session.close()
>>> exit()
เจ เฉฑเจเฉ, เจคเฉเจนเจพเจจเฉเฉฐ เจธเจงเจพเจฐเจจ เจ เจงเจฟเจเจพเจฐเจพเจ เจตเจพเจฒเจพ เจเฉฑเจ เจเจชเจญเฉเจเจคเจพ เจฌเจฃเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ เจเจฟเจธ เจจเฉเฉฐ DAG เจจเฉเฉฐ เจเจฐเจฟเฉฑเจเจฐ เจเจฐเจจ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฑเจคเฉ เจเจพเจตเฉเจเฉเฅค
>>> import airflow
>>> from airflow import models, settings
>>> from airflow.contrib.auth.backends.password_auth import PasswordUser
>>> user = PasswordUser(models.User())
>>> user.username = 'newprolab'
>>> user.password = 'Newprolab2019!'
>>> session = settings.Session()
>>> session.add(user)
>>> session.commit()
>>> session.close()
>>> exit()
เจนเฉเจฃ เจธเจญ เจเฉเจ เจคเจฟเจเจฐ เจนเฉ.
3. เจเฉฑเจ POST เจฌเฉเจจเจคเฉ เจฒเจพเจเจ เจเจฐเฉ
POST เจฌเฉเจจเจคเฉ เจเจชเจฃเฉ เจเจช เจเจธ เจคเจฐเฉเจนเจพเจ เจฆเจฟเจเจพเจ เจฆเฉเจตเฉเจเฉ:
>>> dag_id = newprolab
>>> url = 'http://{}:{}/{}/{}/{}'.format(host, airflow_port, 'api/experimental/dags', dag_id, 'dag_runs')
>>> data = {"conf":"{"key":"value"}"}
>>> headers = {'Content-type': 'application/json'}
>>> auth = ('newprolab', 'Newprolab2019!')
>>> uri = requests.post(url, data=json.dumps(data), headers=headers, auth=auth)
>>> uri.text
'{n "message": "Created <DagRun newprolab @ 2019-03-27 10:24:25+00:00: manual__2019-03-27T10:24:25+00:00, externally triggered: True>"n}n'
เจฌเฉเจจเจคเฉ 'เจคเฉ เจธเจซเจฒเจคเจพเจชเฉเจฐเจตเจ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจเฉเจคเฉ เจเจ เจธเฉเฅค
เจเจธ เจ เจจเฉเจธเจพเจฐ, เจ เจธเฉเจ เจซเจฟเจฐ เจกเฉเจเจเฉ เจจเฉเฉฐ เจเจพเจฐเจตเจพเจ เจเจฐเจจ เจ เจคเฉ เจเจฒเจฟเจเจนเจพเจเจธ เจเฉเจฌเจฒ เจจเฉเฉฐ เจฌเฉเจจเจคเฉ เจเจฐเจจ เจฒเจ เจเฉเจ เจธเจฎเจพเจ เจฆเจฟเฉฐเจฆเฉ เจนเจพเจ, เจเฉฐเจเจฐเฉเจฒ เจกเฉเจเจพ เจชเฉเจเฉเจ เจจเฉเฉฐ เจซเฉเจจ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเจฐเจฆเฉ เจนเฉเจเฅค
เจเจพเจเจ เจชเฉเจฐเฉ เจนเฉเจเฅค
เจธเจฐเฉเจค: www.habr.com