숙제
Dags 리스트를 API로 읽고 활성화된 DAG 찾기
활성화된 DAG
- API 요청을 통해 얻은 정보 중 'is_paused'가 False면 활성화 중인 DAG
- 'is_paused'가 False인 DAG의 'dag_id'를 출력하는 코드 작성
코드
- 활성화된 DAG가 없기에 아무것도 출력이 안됨
- 'is_paused' == True로 수정하면 모든 DAG 출력 여부 확인 완료
import requests
from requests.auth import HTTPBasicAuth
def print_activated_dags(username='airflow', password='airflow'):
url = 'http://localhost:8080/api/v1/dags'
auth = HTTPBasicAuth(username, password)
response = requests.get(url, auth=auth)
for dag in response.json()['dags']:
if dag['is_paused'] == False:
print(dag['dag_id'])
print_activated_dags()
config API 활성화
명령어
curl -X GET --user "airflow:airflow" http://localhost:8080/api/v1/config
수정 전 결과
{
"detail": "Your Airflow administrator chose not to expose the configuration, most likely for security reasons.",
"status": 403,
"title": "Forbidden",
"type": "https://airflow.apache.org/docs/apache-airflow/2.5.1/stable-rest-api-ref.html#section/Errors/PermissionDenied"
}
airflow.cfg 수정 및 결과
- config API 권한 문제 해결을 위해 webserver 섹션의 expose_config = True로 설정해야 함
- docker-compose.yaml의 환경변수로 AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'로 설정
[core]
dags_folder = /opt/airflow/dags
hostname_callable = airflow.utils.net.getfqdn
default_timezone = utc
executor = CeleryExecutor
parallelism = 32
max_active_tasks_per_dag = 16
dags_are_paused_at_creation = true
max_active_runs_per_dag = 16
load_examples = true
plugins_folder = /opt/airflow/plugins
execute_tasks_new_python_interpreter = False
fernet_key =
donot_pickle = True
dagbag_import_timeout = 30.0
dagbag_import_error_tracebacks = True
dagbag_import_error_traceback_depth = 2
dag_file_processor_timeout = 50
task_runner = StandardTaskRunner
default_impersonation =
security =
unit_test_mode = False
enable_xcom_pickling = False
allowed_deserialization_classes = airflow\..*
killed_task_cleanup_time = 60
dag_run_conf_overrides_params = True
dag_discovery_safe_mode = True
dag_ignore_file_syntax = regexp
default_task_retries = 0
default_task_retry_delay = 300
default_task_weight_rule = downstream
default_task_execution_timeout =
min_serialized_dag_update_interval = 30
compress_serialized_dags = False
min_serialized_dag_fetch_interval = 10
max_num_rendered_ti_fields_per_task = 30
check_slas = True
xcom_backend = airflow.models.xcom.BaseXCom
lazy_load_plugins = True
lazy_discover_providers = True
hide_sensitive_var_conn_fields = True
sensitive_var_conn_names =
default_pool_task_slot_count = 128
max_map_length = 1024
daemon_umask = 0o077
sql_alchemy_conn = postgresql+psycopg2://airflow:airflow@postgres/airflow
...
variables API는 환경 변수도 리턴하는가?
명령어
curl -X GET --user "airflow:airflow" http://localhost:8080/api/v1/variables
결과
"total_entries": 3,
"variables": [
{
"description": "",
"key": "slack_url",
"value": "~"
},
{
"description": "",
"key": "csv_url",
"value": "~"
},
{
"description": "",
"key": "google_sheet_access_token",
"value": "{~}"
}
]
}
결론
- 이전에 yaml 파일에 AIRFLOW_VAR_DATA_DIR이라는 환경 변수를 설정했지만 확인 불가
- DATA_DIR variable이 존재하는지 확인하였지만 찾을 수 없음
- 즉, 웹 UI에 등록했던 variable만 API로 확인 가능
curl -X GET --user "airflow:airflow" http://localhost:8080/api/v1/variables/{DATA_DIR}
{
"detail": null,
"status": 404,
"title": "Variable not found",
"type": "https://airflow.apache.org/docs/apache-airflow/2.5.1/stable-rest-api-ref.html#section/Errors/NotFound"
}